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语言网络程序设计的学习有所帮助。