Linux 网络编程 简单实例

本文详细介绍了Linux环境下使用socket协议实现TCP和UDP客户端与服务器的通信,包括客户端如何创建socket连接、发送接收数据以及服务器端如何监听、接受连接并响应请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、编写Linux下socket协议TCP的ClientServer程序

[c++]  view plain copy
  1. //客户端,client:  
  2.   
  3. #include<stdio.h>  
  4. #include<unistd.h>  
  5. #include<stdlib.h>  
  6. #include<sys/socket.h>  
  7. #include<sys/stat.h>  
  8. #include<arpa/inet.h>  
  9. #define MAXBUF 256  
  10. int main()  
  11. {  
  12.     int ssock;  
  13.     int clen;  
  14.     struct sockaddr_in server_addr;  
  15.     char buf[MAXBUF];  
  16.     if((ssock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP))<0){  
  17.         perror("socket error:");  
  18.         exit(1);  
  19.     }  
  20.     clen = sizeof(server_addr);  
  21.     memset(&server_addr,0,sizeof(server_addr));  
  22.     server_addr.sin_family     =AF_INET;  
  23.     server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");  
  24.     server_addr.sin_port       =htons(7758);  
  25.     if(connect(ssock,(struct sockaddr *)&server_addr,clen)<0){  
  26.         perror("connect error:");  
  27.         exit(1);  
  28.     }  
  29.     memset(buf,0,MAXBUF);  
  30.     if(read(ssock,buf,MAXBUF)<=0)  
  31.     {  
  32.         perror("read error:");  
  33.         exit(1);  
  34.     }  
  35.     close(ssock);  
  36.     printf("\nread: %s\n",buf);  
  37.     return 0;  
  38. }  
[html]  view plain copy
  1. //服务端,server:  
  2.   
  3. #include<stdio.h>  
  4. #include<unistd.h>  
  5. #include<stdlib.h>  
  6. #include<string.h>  
  7. #include<sys/socket.h>  
  8. #include<sys/stat.h>  
  9. #include<arpa/inet.h>  
  10. #define MAXBUF 256  
  11. int main()  
  12. {  
  13.     int clen;  
  14.     int ssock,csock;  
  15.     struct sockaddr_in client_addr,server_addr;  
  16.     char buf[MAXBUF];  
  17.     if((ssock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP))<0){  
  18.         perror("socket error:");  
  19.         exit(1);  
  20.     }  
  21.     clen = sizeof(client_addr);  
  22.     memset(&server_addr,0,sizeof(server_addr));  
  23.     server_addr.sin_family     =AF_INET;  
  24.     server_addr.sin_addr.s_addr=htonl(INADDR_ANY);<p>    server_addr.sin_port=htons(7758);  
  25.     if(bind(ssock,(struct sockaddr *)&server_addr,sizeof(server_addr))<0){  
  26.         perror("bind error");  
  27.         exit(1);  
  28.     }  
  29.     if(listen(ssock,8)<0){  
  30.         perror("listen error:");  
  31.         exit(1);  
  32.     }  
  33.     while(1){  
  34.         csock=accept(ssock,(struct sockaddr *)&client_addr,&clen);  
  35.         if(write(csock,buf, MAXBUF)<=0)  
  36.             perror("write error:");  
  37.         close(csock);  
  38.     }  
  39.     return 0;  
  40. }  
  41. </p>  
二、编写Linux下的socket协议UDP Client/Server程序
[html]  view plain copy
  1. //客户端,client:  
  2.   
  3. #include<stdio.h>  
  4. #include<unistd.h>  
  5. #include<stdlib.h>  
  6. #include<string.h>  
  7. #include<sys/socket.h>  
  8. #include<sys/stat.h>  
  9. #include<arpa/inet.h>  
  10. #define MAXBUF 256  
  11. int main()  
  12. {  
  13.     int ssock;  
  14.     int clen;  
  15.     struct sockaddr_in client_addr,server_addr;  
  16.     char buf[MAXBUF];  
  17.     strcpy(buf,"I miss you already!\n");  
  18.     if((ssock = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))<0){  
  19.         perror("socket error:\n");  
  20.         exit(1);  
  21.     }  
  22.     memset(&server_addr,0,sizeof(server_addr));  
  23.     server_addr.sin_family  =AF_INET;  
  24.     server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");  
  25.     server_addr.sin_port=htons(7758);  
  26.     sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,sizeof(server_addr));  
  27.     printf("Send message:%s\n",buf);  
  28.     clen=sizeof(client_addr);  
  29.     recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&server_addr,&clen);  
  30.     printf("Receive message:%s\n",buf);  
  31.     close(ssock);  
  32.     return 0;  
  33. }  
[html]  view plain copy
  1. //服务端,server:  
  2.   
  3. #include<stdio.h>  
  4. #include<unistd.h>  
  5. #include<stdlib.h>  
  6. #include<string.h>  
  7. #include<sys/socket.h>  
  8. #include<sys/stat.h>  
  9. #include<arpa/inet.h>  
  10. #define MAXBUF 256  
  11. int main()  
  12. {  
  13.     int ssock;  
  14.     int clen;  
  15.     struct sockaddr_in client_addr,server_addr;  
  16.     char buf[MAXBUF];  
  17.     if((ssock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))<0){  
  18.         perror("socket error:");  
  19.         exit(1);  
  20.     }  
  21.     memset(&server_addr,0,sizeof(server_addr));  
  22.     server_addr.sin_family=AF_INET;  
  23.     server_addr.sin_addr.s_addr=htonl(INADDR_ANY);  
  24.     server_addr.sin_port=htons(7758);  
  25.     if(bind(ssock,(struct sockaddr *)&server_addr,sizeof(server_addr))<0){  
  26.         perror("bind error:");  
  27.         exit(1);  
  28.     }  
  29.     clen=sizeof(client_addr);  
  30.     recvfrom(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr,&clen);  
  31.     strcpy(buf,"I miss you");  
  32.     sendto(ssock,(void *)buf,MAXBUF,0,(struct sockaddr*)&client_addr ,sizeof(client_addr));  
  33.     close(ssock);  
  34.     return 0;  
  35. }  



from: http://blog.youkuaiyun.com/silentpebble/article/details/7077161

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值