怎么使用linux socket实现服务器和客户端对话

67次阅读
没有评论

共计 2587 个字符,预计需要花费 7 分钟才能阅读完成。

本文丸趣 TV 小编为大家详细介绍“怎么使用 linux socket 实现服务器和客户端对话”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用 linux socket 实现服务器和客户端对话”文章能帮助大家解决疑惑,下面跟着丸趣 TV 小编的思路慢慢深入,一起来学习新知识吧。

1. 服务器端
#include  sys/types.h 
#include  sys/socket.h 
#include  stdio.h 
#include  stdlib.h 
#include  errno.h 
#include  string.h 
#include  unistd.h 
#include  netinet/in.h 
#define SERVPORT 3333
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 5
int main()
 struct sockaddr_in server_sockaddr,client_sockaddr;
 int sin_size,recvbytes;
 int sockfd,client_fd;
 char buf[MAXDATASIZE];
/* 创建 socket*/
 if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){
 perror( socket 
 exit(1);
 }
 printf(socket success!,sockfd=%d\n ,sockfd);
/* 设置服务器 sockaddr_in 结构 */
 server_sockaddr.sin_family=AF_INET;
 server_sockaddr.sin_port=htons(SERVPORT);
 server_sockaddr.sin_addr.s_addr=INADDR_ANY;
 bzero((server_sockaddr.sin_zero),8);
/* 绑定 socket 和端口 */
 if(bind(sockfd,(struct sockaddr *) server_sockaddr,sizeof(struct sockaddr))==-1){
 perror( bind 
 exit(1);
 }
 printf( bind success!\n 
/* 监听客户端请求 */
 if(listen(sockfd,BACKLOG)==-1){
 perror( listen 
 exit(1);
 }
 printf( listening....\n 
/* 接受客户端请求 */
 if((client_fd=accept(sockfd,(struct sockaddr *) client_sockaddr, sin_size))==-1){
 perror( accept 
 exit(1);
 }
/* 接收客户端信息 */
 if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))==-1){
 perror( recv 
 exit(1);
 }
 printf(received a connection :%s\n ,buf);
/* 关闭 socket*/
 close(sockfd);
2. 客户端
#include  stdio.h 
#include  stdlib.h 
#include  errno.h 
#include  string.h 
#include  netdb.h 
#include  sys/types.h 
#include  netinet/in.h 
#include  sys/socket.h 
#define SERVPORT 3333
#define MAXDATASIZE 100
main(int argc,char *argv[]){
 int sockfd,sendbytes;
 char buf[MAXDATASIZE];
 struct hostent *host;
 struct sockaddr_in serv_addr;
/*argc 2, 表示没有输入主机名,主机句是 IP 地址形式,如“192.168.1.1”*/
 if(argc   2){
 fprintf(stderr, Please enter the server s hostname!\n 
 exit(1);
 }
/* 获取主机名,地址解析函数 */
 if((host=gethostbyname(argv[1]))==NULL){
 perror( gethostbyname 
 exit(1);
 }
/* 创建 socket*/
 if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
 perror( socket 
 exit(1);
 }
/* 设置 serv_addr 结构参数 */
 serv_addr.sin_family=AF_INET;
 serv_addr.sin_port=htons(SERVPORT);
 serv_addr.sin_addr=*((struct in_addr *)host- h_addr);
 bzero((serv_addr.sin_zero),8);
/* 向服务器请求连接,serv_addr 是服务器端地址 */
 if(connect(sockfd,(struct sockaddr *) serv_addr,\
 sizeof(struct sockaddr))==-1){
 perror( connect 
 exit(1);
 }
/* 发送消息给服务器,此时可以在服务器端看到 hello 字样 */
 if((sendbytes=send(sockfd, hello ,5,0))==-1){
 perror( send 
 exit(1);
 }
/* 关闭连接 */
 close(sockfd);
}

编译步骤

#gcc server.c -o server
#./server // 此时服务器端在监听
#gcc client.c -o client
#./client 172.31.100.236 // 客户端向服务器端发送“hello,服务器端监听终止 

读到这里,这篇“怎么使用 linux socket 实现服务器和客户端对话”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-12发表,共计2587字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)