本文主机频道详细介绍了“如何使用linux socket实现服务器与客户端的对话”。内容详细,步骤清晰,细节处理得当。希望这篇文章《如何使用linux socket实现服务器与客户端的对话》能帮你解决疑惑。让我们按照主机频道的思路,一起学习新知识。
1.服务器端
# include & ltsys/types . h & gt;
# include & ltsys/socket . h & gt;
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & lt错误号& gt
# include & ltstring.h & gt
# include & ltunistd.h & gt
# include & ltnetinet/in . h & gt;
#定义服务端口3333
#定义待办事项10
#定义MAX_CONNECTED_NO 10
#定义MAXDATASIZE 5
int main()
{
结构sockaddr_in server_sockaddr,client _ sockaddr
int sin_size,recvbytes
int sockfd,client _ fd
char buf[MAXDATASIZE];
/*创建套接字*/
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){
perror(& quot;插座& quot);
出口(1);
}
printf(& quot;插座成功!,sockfd = % d \ n & quot,sockfd);
/*设置服务器sockaddr_in结构*/
server _ sockaddr . sin _ family = AF _ INET;
server _ sockaddr . sin _ port = htons(SERVPORT);
server _ sockaddr . sin _ addr . s _ addr = in addr _ ANY;
bzero(& amp;(server_sockaddr.sin_zero),8);
/*绑定套接字和端口*/
if(bind(sockfd,(struct sockaddr *)& amp;server_sockaddr,sizeof(struct sockaddr))==-1){
perror(& quot;绑定& quot);
出口(1);
}
printf(& quot;绑定成功!\ n & quot);
/*监控客户端请求*/
if(listen(sockfd,BACKLOG)=-1){
perror(& quot;听着& quot);
出口(1);
}
printf(& quot;倾听....\ n & quot);
/*接受客户端请求*/
if((client_fd=accept(sockfd,(struct sockaddr *)& amp;客户端_ sockaddr & amp;sin_size))==-1){
perror(& quot;接受& quot);
出口(1);
}
/*接收客户端信息*/
if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))==-1){
perror(& quot;recv & quot);
出口(1);
}
printf(& quot;接收到一个连接:% s \ n & quot,buf);
/*关闭套接字*/
关闭(sockfd);
}
2.客户
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & lt错误号& gt
# include & ltstring.h & gt
# include & ltnetdb.h & gt
# include & ltsys/types . h & gt;
# include & ltnetinet/in . h & gt;
# include & ltsys/socket . h & gt;
#定义服务端口3333
#定义MAXDATASIZE 100
main(int argc,char *argv[]){
int sockfd,sendbytes
char buf[MAXDATASIZE];
struct hostent * host
struct sockaddr _ in serv _ addr
/* argc & lt;2,表示没有输入主机名,主机语句采用IP地址的形式,如“192 . 168 . 1 . 1”*/
if(argc & lt;2){
fprintf(标准错误,& quot请输入服务器& # 39;的主机名!\ n & quot);
出口(1);
}
/*获取主机名、地址解析函数*/
if((host = gethostbyname(argv[1])= = NULL){
perror(& quot;gethostbyname & quot);
出口(1);
}
/*创建套接字*/
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror(& quot;插座& quot);
出口(1);
}
/*设置serv_addr的结构参数*/
serv _ addr.sin _ family = AF _ INET
serv _ addr . sin _ port = htons(SERVPORT);
serv _ addr . sin _ addr = *((struct in _ addr *)host-& gt;h _ addr);
bzero(& amp;(serv_addr.sin_zero),8);
/*向服务器请求连接,其中serv_addr是服务器端地址*/
if(connect(sockfd,(struct sockaddr *)& amp;服务器地址,\
sizeof(struct sockaddr))==-1){
perror(& quot;连接& quot);
出口(1);
}
/*向服务器发送消息。这时,你可以看到“hello & quot单词*/
if((sendbytes=send(sockfd,& quot喂& quot,5,0))==-1){
perror(& quot;发送& quot);
出口(1);
}
/*关闭连接*/
关闭(sockfd);
}编译步骤
#gcc server.c -o server
#./server //此时,服务器正在侦听。
#gcc客户端. c -o客户端
#./client 172.31.100.236 //客户端发送“hello & quot,服务器端监控终止。
评论前必须登录!
注册