tcp_server和tcp_client
来源:互联网 发布:ubuntu 软件包破损 编辑:程序博客网 时间:2024/06/06 02:37
tcp_server代码如下:
#include<stdio.h>#include<stdlib.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/types.h>#include<string.h>static void usage(const char *proc){ printf("Usage: %s [local_ip] [local_port]\n",proc);}int startup(const char *ip,int port){ int sock = socket(AF_INET,SOCK_STREAM, 0); if(sock < 0){ perror("socket"); exit(2); } struct sockaddr_in local; local.sin_family = AF_INET; local.sin_port = htons(port); local.sin_addr.s_addr = inet_addr(ip); if(bind(sock, (struct sockaddr*)&local, sizeof(local))<0){ perror("bind"); exit(3); } if(listen(sock, 10)<0){ perror("listen"); exit(4); } return sock;}// ./tcp_server ip portint main(int argc, char *argv[]){ if(argc != 3){ usage(argv[0]); return 1; }int listen_sock = startup(argv[1],atoi(argv[2]));while(1){ struct sockaddr_in client; socklen_t len = sizeof(client); int new_sock = accept(listen_sock,\ (struct sockaddr*)&client, &len); if(new_sock < 0){ perror("accept"); continue; } printf("get a new cilent, %s:%d\n",\ inet_ntoa(client.sin_addr), ntohs(client.sin_port)); while(1){ char buf[1024]; ssize_t s = read(new_sock, buf, sizeof(buf)-1); if(s>0){ buf[s] = 0; printf("client: %s\n", buf); write(new_sock, buf, strlen(buf)); }else if(s == 0){ close(new_sock); printf("client quit...\n"); break; }else{ perror("read"); close(new_sock); break; } }}}****
tcp_client代码如下:
#include<stdio.h>#include<stdlib.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#include<sys/types.h>#include<string.h>static void usage(const char *proc){ printf("Usage:%s[server_ip][server_port]\n",proc);}//./tcp client server-ip server-portint main(int argc,char *argv[]){ if(argc !=3){ usage(argv[0]); return 1; } int sock = socket(AF_INET,SOCK_STREAM,0); if(sock<0){ perror("socket"); return 1; } struct sockaddr_in server; server.sin_family = AF_INET; server.sin_port = htons(atoi(argv[2])); server.sin_addr.s_addr = inet_addr(argv[1]); if(connect(sock,(struct sockaddr*)&server,\ sizeof(server))<0){ perror("connect"); return 2; } char buf[1024]; while(1){ printf("Please Enter# "); fflush(stdout); ssize_t s = read(0,buf,sizeof(buf)-1); if(s>0){ buf[s-1] = 0; write(sock, buf, strlen(buf)); s = read(sock, buf, sizeof(buf)-1); if(s>0){ buf[s] = 0; printf("server echo# %s\n",buf); } } }}
client终止时自动关闭socket描述符,server的tcp 连接收到client发的FIN段后处于TIME_WITE状态。
阅读全文
0 0
- tcp_server和tcp_client
- TCP_client
- tcp_client
- TCP_client
- tcp_client
- TCP_server
- TCP_server
- TCP_server
- TCP_Server
- tcp_server
- tcp_server
- TCP_server
- tcp_server
- 【网络】tcp_server
- 编写tcp_server
- 嵌入式 简单的tcp_client程序可传入参数服务器的IP和PORT,接受buf并存储文件
- socket网络编程之TCP_Client
- TCP_client and server in py
- plsql developer 查询已经执行过的sql语句
- <NOIP> 22 . P1028 数的计算
- 解决ADB端口占用问题
- java中Map,List与Set详解
- 设计模式(六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)
- tcp_server和tcp_client
- Tomcat配置虚拟路径
- iOS开发:禁用UItextfield的选择、全选、粘贴的功能
- vs 2013中常用的快捷键
- abs() floor() ceil() round() fmax() fmin() fmod()
- 深度学习日记 1
- UILabel如何使用sizeToFit进行宽高适配 和 sizeThatFits 以及实现总是顶端显示text的需求
- flask 源码解析:路由
- 工厂模式 有感