Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Socket验证半连接的代码和测试结果

为了验证C为established状态而S为SYN_RECV状态,写了下面的源程序(在别人的基础上改的)推荐阅读:Socket编程获取服务器时间 http://www.linuxidc.com/Linux/2013-04/83423.htmPython之Socket编程学习笔记 http://www.linuxidc.com/Linux/2013-02/78957.htmLinux Socket实现机器间的通信(Perl) http://www.linuxidc.com/Linux/2013-03/81454.htmLinux/Unix服务端和客户端Socket编程入门实例(含源码下载) http://www.linuxidc.com/Linux/2012-07/66247.htm1. 源程序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...... ", strerror(errno));
                        return -1;
                } else {
                        printf("i=%d,fd:%d, ESTABLISHED. ", 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...... ");
                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...... ");
                exit(1);
        }        if(listen(listenfd, 4) < 0){
                perror("listen() error...... ");
                exit(1);
        }        printf("listening... ");
        while(1){
                sleep(1);
        }        exit(0);