博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux Socket编程:基于TCP/IP的客户端与服务端通讯实例
阅读量:4192 次
发布时间:2019-05-26

本文共 2895 字,大约阅读时间需要 9 分钟。

Linux Socket编程:基于TCP/IP的客户端与服务端通讯实例

服务端代码

#include 
#include
#include
#include
#include
#include
int main(int argc, char *argv[]){ int serv_sock, clnt_sock; struct sockaddr_in serv_addr, clnt_addr; socklen_t clnt_addr_size; if (argc != 2) { printf("Usage: %s
\n", argv[0]); exit(1); } serv_sock = socket(AF_INET, SOCK_STREAM, 0); if (serv_sock < 0) { printf("sock() error\n"); exit(1); } memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(atoi(argv[1])); int optval = 1; // setting address and port reusable setsockopt(serv_sock, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); if (bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) { printf("bind() error\n"); exit(1); } if (listen(serv_sock, 5) < 0) { printf("listen() error\n"); exit(1); } clnt_addr_size = sizeof(clnt_addr); clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size); if (clnt_sock < 0) { printf("accept() error\n"); exit(1); } char buf[1024]; printf("connected with ip: %s and port: %d\n", inet_ntop(AF_INET, &clnt_addr.sin_addr, buf, 1024), ntohs(clnt_addr.sin_port)); while (1) { memset(buf, 0, sizeof(buf)); ssize_t size = read(clnt_sock, buf, sizeof(buf) - 1); if (size < 0) { printf("read() error\n"); break; } else { printf("client#: %s\n", buf); } } close(clnt_sock); close(serv_sock); return 0;}

客户端代码

#include 
#include
#include
#include
#include
#include
int main(int argc, char *argv[]){ int clnt_sock; struct sockaddr_in serv_addr; int str_len; if (argc != 3) { printf("Usage: %s
\n", argv[0]); exit(1); } clnt_sock = socket(AF_INET, SOCK_STREAM, 0); if (clnt_sock < 0) { printf("sock() error\n"); exit(1); } memset(&serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = inet_addr(argv[1]); serv_addr.sin_port = htons(atoi(argv[2])); if (connect(clnt_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1) { printf("connect() error\n"); exit(1); } char buf[1024]; while (1) { memset(buf, 0, sizeof(buf)); printf("client enter: "); fflush(stdout); ssize_t size = read(0, buf, sizeof(buf) - 1); if (size < 0) { printf("read() error\n"); break; } else { buf[size - 1] = '\0'; } write(clnt_sock, buf, strlen(buf)); } close(clnt_sock); return 0;}

使用方法

编译:

$ gcc hello_server.c -o hello_server$ gcc hello_client.c -o hello_client

打开终端:

$ ./hello_server 8888

打开另一个终端:

$ ./hello_client 127.0.0.1 8888

运行结果

客户端:

$ ./hello_client 127.0.0.1 8888client please enter: 123client please enter: 456client please enter:

服务端:

$ ./hello_server 8888connected with ip: 127.0.0.1 and port: xxxxclient#: 123client#: 456

  • 我的个人主页:
  • 我的个人站点博客:
  • 我的CSDN博客:
  • 我的简书:
  • 我的GitHub:
    欢迎相互follow~

转载地址:http://pnloi.baihongyu.com/

你可能感兴趣的文章
苹果神秘新iPhone首曝光,外形终于无槽点了!
查看>>
纯电动SUV哪吒U Pro即将上线:最高续航610公里
查看>>
跟谁学宣布独立调查结论:没有造假 盘后股价涨超8%
查看>>
五菱神车,昙花一现还是创造蓝海?
查看>>
全民“炒基”热:谁在为张坤疯狂?
查看>>
引入深国际、鲲鹏资本战略投资 苏宁易购复牌涨停
查看>>
手机价格要上涨?小米和Realme确认芯片短缺:高通交付延长至30周以上
查看>>
情怀奏不响民宿的狂想曲
查看>>
苹果iPhone 13有望提供1TB存储 但仅限高端机型
查看>>
会玩!格力公开“磁悬浮床垫”专利
查看>>
鸿蒙系统将登陆2亿台华为手机,“别的厂商想用,我们会支持!”
查看>>
ROG游戏手机5跑分曝光:全球首发18GB超大内存
查看>>
亚洲新首富出炉!富豪榜单大洗牌,马云3年来首次跌出中国前三
查看>>
沃尔沃XC40纯电版官宣降价至29.9万元起
查看>>
董明珠:建议个税起征点提高到一万元
查看>>
魅族预热魅族18系列:没有中杯 大杯起步
查看>>
百度吉利成立的汽车公司名称曝光,百度持股55%
查看>>
昆仑万维14亿收购音频社交平台Star Group 60%股权 周亚辉获益超10亿元
查看>>
蔚来已开始部署第二代换电站 最大容量13块电池
查看>>
3月4日见!Redmi Note 10系列屏幕升级:首次采用Super AMOLED屏
查看>>