如何接收tcpip发来的数据并解析?

884813 2003-04-23 09:16:30
写下这个题目我自己也搞不大明白。总之是要用PB来做了。各位给指点指点。
...全文
269 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
884813 2003-04-28
  • 打赏
  • 举报
回复
谢谢参与讨论的朋友。
这里再问一下,有无了解“103归约”的朋友?
884813 2003-04-28
  • 打赏
  • 举报
回复
更正一下,是“103规约”。
online 2003-04-25
  • 打赏
  • 举报
回复
这样的话,你只能用c来做了
跨平台。
有区别,只是底层的函数不一样了

pb7中有connection,transport对象


884813 2003-04-25
  • 打赏
  • 举报
回复
看了些例子,都是基于WINDOWS平台的。现在的问题是,数据从UNIX主机发过来,在WINDOWS平台上接收和解析,这跟客户、服务器都在WINDOWS平台上的连接有区别吗?
884813 2003-04-25
  • 打赏
  • 举报
回复
看看还能不能发言!
884813 2003-04-24
  • 打赏
  • 举报
回复
自己顶一下!
884813 2003-04-23
  • 打赏
  • 举报
回复
谢谢!
killerdanny 2003-04-23
  • 打赏
  • 举报
回复
http://www.cic.tsinghua.edu.cn/sys/book2/ws2chpc12z.htm

你先看看这个!

我在做SERVER
和我以前的CLIENT可以连接
但是发数据还有问题!
884813 2003-04-23
  • 打赏
  • 举报
回复
有能收发的例子最好了!
killerdanny 2003-04-23
  • 打赏
  • 举报
回复
hehe!
你是不是要一个能收发的例子!
884813 2003-04-23
  • 打赏
  • 举报
回复
据说WINSOCK.pbl有不少错误,有用过WINSOCK.pbl的兄弟吗?
rick1126 2003-04-23
  • 打赏
  • 举报
回复
要不你们使用微软的winsock控件, 我还是同意上面的仁兄使用VC写一个DLL
884813 2003-04-23
  • 打赏
  • 举报
回复
这里可以下。
http://lzg.myrice.com/download/file/powersock.zip
884813 2003-04-23
  • 打赏
  • 举报
回复
WINSOCK.pbl我现在也没有,来找找先。
killerdanny 2003-04-23
  • 打赏
  • 举报
回复
应该和上面一样的!

先创建SOCKET,然后BAND,然后LISTEN

然后ACCEPT。

你那里还有WINSOCK.pbl发给我一个,我做一个试试!

我这些都是标准C在LINUX下用的!

884813 2003-04-23
  • 打赏
  • 举报
回复
C自不不必说了。可是要在PB环境下实现,DANNY知道怎么做吗?
killerdanny 2003-04-23
  • 打赏
  • 举报
回复
tcp是上层协议,IP是底层协议!

IP协议的上层有UDP和TCP协议!

TCP协议是面向连接,而UDP是面向非连接!

呵呵!

目前我在做这些东西!

不过是用C
//zw_server.c
#include <stdio.h>
#include <ctype.h>
#include <errno.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/file.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <netdb.h>
#include <unistd.h>
#include <sys/wait.h>
//#include <fcnl.h>
#define MYPORT 5000
#define BACKLOG 5

void sigchild_handler(int);
int main(){

int sockfd,new_fd;
struct sockaddr_in srvaddr;
struct sockaddr_in cliaddr;
struct sigaction act;
char buff[100];
int sin_size,numbytes;
int pid;
if((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1){
perror("SOCKET CREATE ERROR");
exit(1);
}
bzero(&srvaddr,sizeof(srvaddr));
srvaddr.sin_family = AF_INET;
srvaddr.sin_port =htons(MYPORT) ;
if (bind(sockfd,(struct sockaddr *)&srvaddr,sizeof (struct sockaddr)) == -1) {
perror("bind error");
exit(1);

}
if (listen(sockfd ,BACKLOG) == -1){
perror("listen error");
exit(1);
}
act.sa_handler = sigchild_handler;
sigemptyset(&act.sa_mask);
//for(;;){
sin_size = sizeof(struct sockaddr_in);
new_fd= accept(sockfd,(struct sockaddr *)&cliaddr,&sin_size);

//if (new_fd < 0 && errno == EINTR)
//continue;
//printf("server :get connect from %s \n",inet_ntoa(cliaddr.sin_addr));
//strcpy(buff,"this is an example!\n");
//if (send(new_fd , buff,sizeof(buff),0) == -1)
//perror("WRITE error");

//close(new_fd);
if ((pid = fork())==0){
printf("in child process\n");
if (fork() == 0){
if ((numbytes = recv(new_fd,buff,strlen(buff),0))<0){
perror("recv:");
exit(1);}
printf("%s",buff);
if (send(new_fd,buff,strlen(buff),0)<0)
perror("SEND:");
close(new_fd);
exit(0);
}
exit(0);

}

//}

close(sockfd);
}

void sigchild_handler(int sig)
{
pid_t pid;
int status;

for (;(pid = waitpid(-1,&status,WNOHANG))> 0; ){
printf("child%d died :%d\n",WEXITSTATUS(status));
}
}
//zw_client.c
#include <stdio.h>
#include <ctype.h>
#include <errno.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/file.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <netdb.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#define MYPORT 5000
#define MAX_SEND_DATA 1024
#define BACKLOG 5
int main(int argc,char *argv[]){

int sockfd,nbytes,len;
char buf[1024];
char buff_send[MAX_SEND_DATA];
struct hostent *he;
struct sockaddr_in srvaddr;

if (argc !=3 ){
perror("host home \n");
exit(1);
}
if ((he = gethostbyname(argv[1]) )== NULL){
perror("hostname");
exit(1);
}


if((sockfd = socket(AF_INET,SOCK_STREAM,0))== -1){
perror("SOCKET CREATE ERROR");
exit(1);
}
bzero(&srvaddr,sizeof(srvaddr));
srvaddr.sin_family = AF_INET;
srvaddr.sin_port =htons(MYPORT) ;
srvaddr.sin_addr = *((struct in_addr *)he->h_addr);

if (connect(sockfd,(struct sockaddr *)&srvaddr,sizeof (struct sockaddr)) == -1) {
perror("connect error");
exit(1);

}
while(1){
bzero(buff_send,sizeof(buff_send));
len=read(STDIN_FILENO,buff_send,sizeof(buff_send));
//strcpy(buff_send, argv[2]);
if (send(sockfd,buff_send,strlen(buff_send)+1,0)< 0){
perror("send");
exit(1);
}
//for(;;){
memset(buf,0,sizeof(buf));
if ((nbytes = recv(sockfd,buf,sizeof(buf),0)) == -1){
perror(" rec error");
exit(1);
}//}
printf("read:%s",buf);
}
close(sockfd);

}
884813 2003-04-23
  • 打赏
  • 举报
回复
初步的需求就是监听UNIX主机的某个端口,实时把收到的数据写入本地数据库。我还记得在用PB7的时候做所谓的“三层”有listen()等相关的函数,PB8好像已经废除了这些东西。

1,079

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧