网络编程的流程:客户端:1、 创建一个socket;2、 绑定socket(IP,端口号);因为在connect()中已经绑定了,所以不需要用blind()函数来绑定serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(MYPORT); //端口号也就是进程,相当于应用程序的编号端口号要与服务端的一致,所以绑定的端口号是服务端的端口号serv_addr.sin_addr.s_addr=inet_addr(IP); //绑定的IP是本机的IP3、 发送建立连接请求connect();4、 收到连接响应;5、 发送数据send();6、 关闭socket, close(sock_fd)服务端端:1、 创建一个socket;2、 绑定socket(IP,端口号),blind();my_addr.sin_family = AF_INET;my_addr.sin_port = htons(MYPORT); //绑定的端口号是自己的端口号my_addr.sin_addr.s_addr = INADDR_ANY; // IP是客户端任意一个IP3、 侦听来自客户端的连接请求,listen();4、 有客户端连接请求,为建立请求的客户端创建一个socket,返回连接响应,accept();5、 接受客户端发送的数据,recv();6、 关闭,close(new_fd)。
include #include #include #include #include #include #include #include #define MYPORT 3999 //listening port#define BACKLOG 10 //max connect requests#define MAXDATASIZE 100 /*max data volume */#define IP "127.0.0.1"main(int argc,char *argv[]){ int sock_fd,numbytes;// char *buf;// buf=(char *)malloc(20); char buf[20]; struct hostent *host; struct sockaddr_in serv_addr;/*socket*/ if((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket creat error"); exit(1); } serv_addr.sin_family=AF_INET; serv_addr.sin_port=htons(MYPORT); // serv_addr.sin_addr=inet_addr(IP); serv_addr.sin_addr.s_addr=inet_addr(IP); bzero(&(serv_addr.sin_zero),8);/*connect*/ if(connect(sock_fd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1) { perror("connect error"); exit(1); } printf("Please enter the string:\n"); gets(buf);/*send*/ if((numbytes=send(sock_fd,buf,strlen(buf),0))==-1) { perror("send error"); exit(1); }printf("send:%d\n",numbytes); close(sock_fd); exit(0);}#include #include #include #include #include #include #include #include #define MYPORT 3999 //listening port#define BACKLOG 10 //max connect requests#define MAXDATASIZE 100 /*max data volume */main(){ int sock_fd, new_fd, numbytes; /*sock_fd:listening socket;new_fd:data socket */ struct sockaddr_in my_addr; /*server address */ struct sockaddr_in their_addr; /*client address */ int sin_size; char buf[MAXDATASIZE];/*创建socket*/ if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1) { perror("socket create error"); exit(1); } my_addr.sin_family = AF_INET; my_addr.sin_port = htons(MYPORT); my_addr.sin_addr.s_addr = INADDR_ANY; bzero(&(my_addr.sin_zero), 8); if (bind (sock_fd, (struct sockaddr *) &my_addr, sizeof(struct sockaddr)) == -1) { perror("bind error"); exit(1); } printf("bind success\n"); if (listen(sock_fd, BACKLOG) == -1) { perror("listen error"); exit(1); }/*accept*/ while (1) { sin_size = sizeof(struct sockaddr_in); if ((new_fd = accept(sock_fd, (struct sockaddr *) &their_addr, &sin_size)) == -1) { perror("accept error"); continue; } printf("received a connect from:%s\n", inet_ntoa(their_addr.sin_addr)); if ((numbytes = recv(new_fd, buf, MAXDATASIZE, 0)) == -1) { perror("recv error"); exit(1); } buf[numbytes] = '\0'; printf("Received:%s\n", buf); close(new_fd); }}。