- 论坛徽章:
- 0
|
接收端的测试代码:
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
int main()
{
int sock_lsn, sock_new;
struct sockaddr_in server, client;
size_t sin_size=sizeof(struct sockaddr_in);
char buf[2000];
size_t len;
bzero(&server,sizeof(server));
server.sin_family = AF_INET;
server.sin_port =htons(50789);
server.sin_addr.s_addr =inet_addr("192.168.0.2");
if((sock_lsn = socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket");
exit(1);
}
if(bind(sock_lsn,(struct sockaddr *)&server,sizeof(struct sockaddr))<0)
{
perror("bind");
exit(1);
}
listen(sock_lsn,5);
if((sock_new=accept(sock_lsn,(struct sockaddr *)&client,&sin_size))<0)
{
perror("socket");
exit(0);
}
while(1){
len=recv(sock_new,buf,2000, 0);
if(len >0){
printf("%s\n", buf);
}
}
close(sock_new);
close(sock_lsn);
}
|
发送端的测试代码:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <string.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include<unistd.h>
#include <sys/select.h>
#include <sys/time.h>
#define CORE_PORT 50789
main(int argc ,char **argv)
{
int s,n;
char buf[]="11111111111111111111111111111111111111111111111111111111111111111111111\
111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
char buf1[]="222222222222222222222222222222222222222222222222222222222222222222222222\
222222222222222222222222222222222222222222222222222222222222222222222222";
char buf2[]="333333333333333333333333333333333333333333333333333333333333333333333333\
333333333333333333333333333333333333333333333333333333333333333333333333";
struct sockaddr_in servaddr;
s=socket(AF_INET,SOCK_STREAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(CORE_PORT);
servaddr.sin_addr.s_addr=inet_addr("192.168.0.2");
if((n=connect(s,(struct sockaddr *)&servaddr,sizeof(servaddr)))==-1)
printf("connect error!");
int len =0;
int cnt = 0;
struct timeval waittm;
waittm.tv_sec = 0;
waittm.tv_usec = 20000;
printf("start\n");
while(1)
{
int readlen=sizeof(buf);
len= write(s,buf,readlen);
printf("len = %d\n", len);
printf("send 1:\n%s\n", buf);
select(0, NULL,NULL,NULL, &waittm);
readlen=sizeof(buf1);
len = write(s,buf1,readlen);
printf("len = %d\n", len);
printf("send 2:\n%s\n", buf1);
select(0, NULL,NULL,NULL, &waittm);
readlen=sizeof(buf2);
len = write(s,buf2,readlen);
printf("len = %d\n", len);
printf("send 2:\n%s\n", buf2);
select(0, NULL,NULL,NULL, &waittm);
printf("round %d\n", cnt);
cnt ++;
if(cnt == 40)break;
}
printf("cnt = %d\n", cnt);
sleep(1000);
} |
客户端发每隔一会儿发一个,一共40次,120个包。
服务端只能收到一半的包?
[ 本帖最后由 sjh_311 于 2007-11-7 13:02 编辑 ] |
|