欢迎来到天天文库
浏览记录
ID:40535538
大小:32.50 KB
页数:5页
时间:2019-08-04
《c语言下进行socket通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、项目总结:c语言下进行socket通信最近实验室里在忙四方这个项目,自己感觉挺惭愧的,本来大家大上个周末就已经基本结束了,贾导儿的"五喜临门“酒也都喝了,但是由于自己的原因整体测试一直拖到今天才开始。呜呜,拖组织后腿了。。。。检讨一下。 程序还不是很完美,需要在测试中进一步完善。今天只是介绍一下,c语言在linux下实现socket通信的基础知识。 关于如何在java下建立socket通信,实验室中的牛人已经在博客中总结了,在这里不多说。其实c语言也是一样的道理,在服务器和客户端的例子步骤分别如下:服务器:1、/
2、*创建socketsocket()*/2、/*将套接字与端口帮定bind()*/3、/*监听listen()*/4、/*(接受客户端的connect连接)accept()*/5、接收数据6、关闭socket,客户端:1、/*socket()建立套接字*/2、/*connect()请求连接*/3、/*send数据*/4、关闭close();下面使自己改的网上的一个程序例子:服务器:#include#include#include#include#include3、ys/types.h>#include#include#include#defineMYPORT3999//listeningport#defineBACKLOG10//maxconnectrequests#defineMAXDATASIZE100/*maxdatavolume*/main(){intsock_fd,new_fd,numbytes;/*sock_fd:listeningsocket;new_fd:datasocket*/structsocka4、ddr_inmy_addr;/*serveraddress*/structsockaddr_intheir_addr;/*clientaddress*/intsin_size;charbuf[MAXDATASIZE];/*创建socketsocket()*/if((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1){ perror("socketcreateerror"); exit(1); }my_addr.sin_family=AF_INET; my_addr.sin_port=htons5、(MYPORT); my_addr.sin_addr.s_addr=INADDR_ANY; bzero(&(my_addr.sin_zero),8);/*将套接字与端口帮定bind()*/if(bind(sock_fd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1){ perror("binderror"); exit(1);}/*监听listen()*/if(listen(sock_fd,BACKLOG)==-1){ perror("listenerror"); 6、 exit(1);}/*接受accept()*/while(1){ sin_size=sizeof(structsockaddr_in); if((new_fd=accept(sock_fd,(structsockaddr*)&their_addr,&sin_size))==-1) { perror("accepterror"); continue; } printf("receivedaconnectfrom:%s",inet_ntoa(their_addr.sin_addr));/*创建新的子进程*/if(7、(numbytes=recv(new_fd,buf,MAXDATASIZE,0))==-1) { perror("recverror"); exit(1); } buf[numbytes]=' '; printf("Received:%s",buf); close(new_fd); /*cleanupchildprocesses*/ while(waitpid(-1,NULL,WNOHANG)>0);}}客户端:#include#include#include8、h>#include#include#include#include#include#
3、ys/types.h>#include#include#include#defineMYPORT3999//listeningport#defineBACKLOG10//maxconnectrequests#defineMAXDATASIZE100/*maxdatavolume*/main(){intsock_fd,new_fd,numbytes;/*sock_fd:listeningsocket;new_fd:datasocket*/structsocka
4、ddr_inmy_addr;/*serveraddress*/structsockaddr_intheir_addr;/*clientaddress*/intsin_size;charbuf[MAXDATASIZE];/*创建socketsocket()*/if((sock_fd=socket(AF_INET,SOCK_STREAM,0))==-1){ perror("socketcreateerror"); exit(1); }my_addr.sin_family=AF_INET; my_addr.sin_port=htons
5、(MYPORT); my_addr.sin_addr.s_addr=INADDR_ANY; bzero(&(my_addr.sin_zero),8);/*将套接字与端口帮定bind()*/if(bind(sock_fd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1){ perror("binderror"); exit(1);}/*监听listen()*/if(listen(sock_fd,BACKLOG)==-1){ perror("listenerror");
6、 exit(1);}/*接受accept()*/while(1){ sin_size=sizeof(structsockaddr_in); if((new_fd=accept(sock_fd,(structsockaddr*)&their_addr,&sin_size))==-1) { perror("accepterror"); continue; } printf("receivedaconnectfrom:%s",inet_ntoa(their_addr.sin_addr));/*创建新的子进程*/if(
7、(numbytes=recv(new_fd,buf,MAXDATASIZE,0))==-1) { perror("recverror"); exit(1); } buf[numbytes]=' '; printf("Received:%s",buf); close(new_fd); /*cleanupchildprocesses*/ while(waitpid(-1,NULL,WNOHANG)>0);}}客户端:#include#include#include8、h>#include#include#include#include#include#
8、h>#include#include#include#include#include#
此文档下载收益归作者所有