linux c socket.doc
上传人:yy****24 上传时间:2024-09-10 格式:DOC 页数:7 大小:61KB 金币:16 举报 版权申诉
预览加载中,请您耐心等待几秒...

linux c socket.doc

linuxcsocket.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

16 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

这篇日志还是先从一个能够运行起来的例子出发,一旦能顺利的看到程序的成功运行,那么接下来的事件我想应该是问为什么了?似乎这样更加容易理解和掌握。对于socket程序的概念这里就不多写了,但我相信,如果能看完这整篇文章,我相信不会再有这样的疑问的。下面将编写一个c/s结构的程序,主要功能是client将向server发送一些消息,而当server收到client的请求时,并向client发送一条回应信息。//service_socket.c#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>#include<sys/types.h>#include<netinet/in.h>#include<sys/socket.h>#include<sys/wait.h>#defineSERVPORT3333#defineBACKLOG10#defineMAXSIZE1024intserver_sock_main(){intsockfd,client_fd;structsockaddr_inmy_addr;structsockaddr_inremote_addr;//创建套接字if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socketcreatefailed!");exit(1);}//绑定端口地址my_addr.sin_family=AF_INET;my_addr.sin_port=htons(SERVPORT);my_addr.sin_addr.s_addr=INADDR_ANY;bzero(&(my_addr.sin_zero),8);if(bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1){perror("binderror!");exit(1);}//监听端口if(listen(sockfd,BACKLOG)==-1){perror("listenerror");exit(1);}while(1){intsin_size=sizeof(structsockaddr_in);if((client_fd=accept(sockfd,(structsockaddr*)&remote_addr,&sin_size))==-1){perror("accepterror!");continue;}printf("Receivedaconnectionfrom%s\n",(char*)inet_ntoa(remote_addr.sin_addr));//子进程段if(!fork()){//接受client发送的请示信息intrval;charbuf[MAXSIZE];if((rval=read(client_fd,buf,MAXSIZE))<0){perror("readingstreamerror!");continue;}//打出客户发过来的信息printf("%s\n",buf);//向client发送信息,反馈信息给客户char*msg="Hello,Mrzhang,youareconnected!\n";if(send(client_fd,msg,strlen(msg),0)==-1)perror("senderror!");close(client_fd);exit(0);}close(client_fd);}return0;}编译并启动服务hqlong@ubuntu:~$gccserver.c-oserverhqlong@ubuntu:~$./server&这里我们的server已经作为一个服务后台运行,如果想知道后台的服务的运行状态,可能使用netstat来查看.hqlong@ubuntu:~/t$netstat-nl|grep3333tcp000.0.0.0:33330.0.0.0:*LISTEN可以看出3333端口已经在监听,这说明服务已经启动。为了测试server是否可以接受client的请求,可以使用telnet来进行测试。hqlong@ubuntu:~$telnet127.0.0.13333Trying127.0.0.1…Receivedaconnectionfrom127.0.0.1Connectedto127.0.0.1.Escapecharacteris‘^]’.testtestHello,Mrhqlong,youareconnected!Connectionclosedbyforeignhost.可以看出,我们使用telnet来连接刚所启动的server,然后向该