C语言实现socket简单通信实例
本文实例讲述了C语言实现socket简单通信的方法,分享给大家供大家参考。具体实现方法如下:
服务器端代码如下:
/* ============================================================================ Name:server.c Author:king Version: Copyright:Yourcopyrightnotice Description:HelloWorldinC,Ansi-style ============================================================================ */ #include<stdlib.h> #include<pthread.h> #include<sys/socket.h> #include<sys/types.h> #include<netinet/in.h> #include<arpa/inet.h>/*inet(3)functions*/ #include<stdlib.h> #include<errno.h> #include<stdio.h> #include<string.h> inthandle(intpoint); intmain(void){ intsfd,ind; structsockaddr_inaddr; structsockaddr_inclent; charresv[1024],sendbuf[1024]; charbuf[1024]; char*myaddr="192.168.231.128"; intret;//返回值设置 socklen_tlent; intpid; addr.sin_family=AF_INET;//IPv4Internetprotocols addr.sin_port=htons(5050);//这里输入服务器端口号 addr.sin_addr.s_addr=inet_addr(myaddr); ;//INADDR_ANY表示本机IP //獲取socket描述符,IPV4asd printf("socketstart\n"); sfd=socket(AF_INET,SOCK_STREAM,0); if(sfd<0){ printf("socketerror\n"); return-1; } printf("bindstart\n"); //将套接子与指定端口链接 if(bind(sfd,(structsockaddr*)&addr,sizeof(structsockaddr))<0){ printf("binderror\n"); return-1; } //监听套接子 printf("listenstart\n"); if(listen(sfd,1024)<0){ printf("listenerror\n"); return-1; } for(;;){ //接受来自客户端的信息 printf("acceptstart\n"); memset(&clent,0,sizeof(clent)); lent=sizeof(clent); ind=accept(sfd,(structsockaddr*)&clent,&lent); if(ind<0){ printf("accepterror%d\n",ind); return-1; } printf("infor\n"); printf("clentaddr%sporit%d\n", inet_ntop(AF_INET,&clent.sin_addr,buf,sizeof(buf)), ntohs(clent.sin_port)); pid=fork(); if(pid==0){ //子进程 close(sfd); handle(ind); }elseif(pid<0){ //error close(ind); }else{ //父进程 } } returnEXIT_SUCCESS; } inthandle(intpoint){ intretn; charbuf[1024]; for(;;){ retn=read(point,buf,sizeof(buf)); if(retn<0){ printf("readerror\n"); close(point); break; }elseif(retn==0){ printf("clientexit\n"); close(point); break; } printf("client:%s\n",buf); if(strcmp("exit",buf)==0){ printf("exit\n"); close(point); return0; } } return0; }
客户端代码如下:
/* ============================================================================ Name:client.c Author:king Version: Copyright:Yourcopyrightnotice Description:HelloWorldinC,Ansi-style ============================================================================ */ #include<stdio.h> #include<stdlib.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h>/*inet(3)functions*/ inthandle(intfd); intmain(void){ intnsd; charbuf[1024]; char*myaddr="192.168.231.128"; structsockaddr_inaddr; printf("welcometoechoclient\n"); nsd=socket(AF_INET,SOCK_STREAM,0); printf("connectstart1\n"); //bzero(addr,sizeof(*addr)); memset(&addr,0,sizeof(addr)); printf("connectstart2\n"); addr.sin_family=AF_INET; addr.sin_port=htons(5050); addr.sin_addr.s_addr=inet_addr(myaddr); printf("connectstart3\n"); if(connect(nsd,(structsockaddr*)&addr,sizeof(structsockaddr))<0){ printf("connecterror\n"); return-1; } sleep(5); printf("handlestart\n"); handle(nsd); close(nsd); returnEXIT_SUCCESS; } inthandle(intfd){ charsendl[1024],rev[1024]; intretn; for(;;){ memset(sendl,0,sizeof(sendl)); memset(rev,0,sizeof(rev)); if(fgets(sendl,1024,stdin)==NULL){ break; } // printf("wirtestart\n"); write(fd,sendl,strlen(sendl)); read(fd,rev,strlen(rev)); } return0; }
注意:
intconnect(intsockfd,conststructsockaddr*addr,socklen_taddrlen);
记住一定是值addrlen
accept socklen_t*addrlen要是一个指针
希望本文所述对大家C语言网络程序设计的学习有所帮助。