设为首页 加入收藏

TOP

Socket验证半连接的代码和测试结果
2014-11-24 02:50:58 来源: 作者: 【 】 浏览:1
Tags:Socket 验证 连接 代码 测试 结果

为了验证C为established状态而S为SYN_RECV状态,写了下面的源程序(在别人的基础上改的)


推荐阅读:


1. 源程序


1.1 client


#include "head.h"


int main(int argc, char **argv)
{
struct sockaddr_in servaddr;
int status, sockfd,count;
int fd[20];
int index = 0;
int flag = 1;


count = atoi(argv[1]);
while (count-- > 0) {
fd[index] = socket(AF_INET, SOCK_STREAM, 0);
sockfd = fd[index];
index++;
if(sockfd < 0){
perror("socket() error");
exit(1);
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
status = inet_pton(AF_INET, "10.10.37.15", &servaddr.sin_addr);
if(status <= 0){
perror("inet_pton() error");
exit(1);
}


setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (char *)&flag, sizeof(flag));
if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){
close(sockfd);
printf("%s......\n", strerror(errno));
return -1;
} else {
printf("i=%d,fd:%d, ESTABLISHED.\n", index-1, sockfd);
}


}
pause();


return 0;


}


1.2 server


#include "head.h"


int main(int argc, char **argv)
{
int listenfd, sockfd,ret;
struct sockaddr_in servaddr;
char *buf = "serverritethis";
char recv_buf[20];


listenfd = socket(AF_INET, SOCK_STREAM, 0);
if(listenfd < 0){
perror("socket() error......\n");
exit(1);
}


bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);


if(bind(listenfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){
perror("bind() error......\n");
exit(1);
}


if(listen(listenfd, 4) < 0){
perror("listen() error......\n");
exit(1);
}


printf("listening...\n");
while(1){
sleep(1);
}


exit(0);
}



】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇jQuery完成带单选按钮的表格行高.. 下一篇java.lang.RuntimeException: Una..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: