基本套接字调用.doc_第1页
基本套接字调用.doc_第2页
基本套接字调用.doc_第3页
基本套接字调用.doc_第4页
基本套接字调用.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基本套接字调用.txt都是一个山的狐狸,你跟我讲什么聊斋,站在离你最近的地方,眺望你对别人的微笑,即使心是百般的疼痛只为把你的一举一动尽收眼底刺眼的白色,让我明白什么是纯粹的伤害。LINUX中的网络编程是通过SOCKET接口来进行的Socket(套接字)Socket相当于进行网络通信两端的插座,只要对方的Socket和自己的Socket有通信联接,双方就可以发送和接收数据了。其定义类似于文件句柄的定义TCP协议socket流程图 基本套接字调用创建套接字-socket();绑定本机端口-bind();建立连接-connect(),accept();侦听端口-listen();数据传输-send(),recv();输入/输出多路复用-select();关闭套接字-closesocket();客户机/服务器模式在操作过程中采取的是主动请求方式:基于TCP的socket编程步骤:服务器端:1、 创建套接字;使用socket()#include#includeint socket(int domain,int type,int protocol)建立服务器端的socket套接字2、 绑定套接字到一个IP地址和一个端口上;使用bind()#include#includeint bind(int sockfd,struct sockaddr * myaddr,int addrlen);3、 将套接字设置为监听模式,以等待连接请求;使用listen()#includeint listen(int sockfd,int backlog)4、请求到来后,接受连接请求,并返回一个与此次连接对应的套接字;使用accept()#includeint accept(int sockfd,struct sockaddr * addr,int * addrlen)此时新建连接,并创建新的Socket套接字,此时addr为客户端的addr信息。5、 用返回的套接字和客户端进行通信;使用recv()和send()int read(int fd,char * buf,int len)int write(int fd,char * buf,int len)6、 关闭当前的连接,进入等待状态,继续等待客户端的连接;使用close()#includeint close(int sockfd);7、 关闭服务器端的套接字描述符;使用close()#includeint close(int sockfd);客户端:1、 创建客户端套接字;使用socket()#include#includeint socket(int domain,int type,int protocol)2、 向服务器发出连接请求;使用connect()#include#includeint connect(int sockfd,struct sockaddr * servaddr,int addrlen)其中参数servaddr指定远程服务器的套接字地址,包括服务器的IP地址和端口号3、 和服务器端进行网络通信;使用recv()和send()int read(int fd,char * buf,int len)int write(int fd,char * buf,int len)4、 关闭套接字;使用close()#includeint close(int sockfd);以下有一个实例,分为客户端和服务器端服务器端首先建立SOCKET,然后调用本地端口的绑定,接着开始与客户建立联系,并接收客户端发送的消息。客户端则在建立socket之后调用connect函数来建立连接#include #include #include #include #include void process(int fd)char buff10000;int received;int help,read_bytes;received = 5000;/memset ( buff, ., received );while(read_bytes = read(fd, buff, received) = 0)printf(The client is disconnected!n);exit(0);if (read_bytes 0)perror(read);exit(1);printf(%d bytes have received on socket %dn, read_bytes, fd);printf(message from client: %sn, buff);printf(write back to client.n);write(fd, buff, strlen(buff);printf(write ok!n);int main(void)int sockfd ,newsockfd;struct sockaddr_in myaddr, peer;int addrlen1,addrlen2;if (sockfd = socket(AF_INET,SOCK_STREAM,0) 0 )perror(socket);exit(1);addrlen1 = sizeof(myaddr);myaddr.sin_family = AF_INET;myaddr.sin_port = htons(10000);myaddr.sin_addr.s_addr = INADDR_ANY;if (bind(sockfd, &myaddr , addrlen1) 0 )perror(bind);exit(1);if (listen(sockfd, 5 )perror(listen);exit(1);for (;)addrlen2 = sizeof(peer);printf(waiting for connect.n);newsockfd = accept(sockfd, &peer , &addrlen2);if ( newsockfd 0)perror(accept);exit(1);if (fork() = 0)close(sockfd);printf(connection on socket %d from %sn, newsockfd,inet_ntoa(peer.sin_addr.s_addr);while(1) process(newsockfd);close(newsockfd);exit(0);close(newsockfd);#include #include #include #include #include #include #include int main(int argc, char *argv)int sockfd ,newsockfd, help, sent;int read_bytes;int i;struct sockaddr_in peer;struct hostent *serverhost;char buff5000;if(argc != 5)fprintf(stderr, Usage: ./client -i -p n);exit(1);printf(server: %s,tport: %s.n, argv2, argv4);if(strcmp(argv1, -i) != 0)printf(first argument must be: -in);/fprintf(stderr, Usage: ./client -i -p n);exit(1);if(strcmp(argv3, -p) != 0)printf(third argument must be: -pn);exit(1);if (sockfd = socket(AF_INET,SOCK_STREAM,0) h_addr_list0;if (connect(sockfd, &peer, sizeof(peer) 0 )perror(connect);exit(1);while(1)printf(input message to send: n);gets(buff);print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论