《linux网络编程socket》由会员分享,可在线阅读,更多相关《linux网络编程socket(4页珍藏版)》请在金锄头文库上搜索。
1、网络编程的流程:客户端: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、 关闭s
2、ocket, 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、 关闭,cl
3、ose(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.1main(int argc,char *argv) int sock_fd,numbytes;/ char *buf;/ buf=(char *)mall
4、oc(20); char buf20; 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(I
5、P); 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:%dn
6、,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 s
7、ocket */struct sockaddr_in my_addr;/*server address */struct sockaddr_in their_addr;/*client address */int sin_size;char bufMAXDATASIZE;/*创建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
8、_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 successn); if (listen(sock_fd, BACKLOG) = -1) perror(listen error);exit(1);/*accept*/while (1) sin_size = sizeof(stru
9、ct sockaddr_in);if (new_fd = accept(sock_fd, (struct sockaddr *) &their_addr, &sin_size) = -1) perror(accept error);continue;printf(received a connect from:%sn, inet_ntoa(their_addr.sin_addr);if (numbytes = recv(new_fd, buf, MAXDATASIZE, 0) = -1) perror(recv error);exit(1);bufnumbytes = 0;printf(Received:%sn, buf);close(new_fd);