Artical--2--TCP_IP服务器端/客户端迭代一
Artical–2--TCP_IP服务器端/客户端迭代一
迭代一:服务器端简单将接收到客户端的message,发回给客户端:
echo_server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 1024
void error_handling(char * message);int main(int argc,char * argv[])
{int serv_sock;int clnt_sock;char message[BUF_SIZE];int str_len,i;struct sockaddr_in serv_adr;struct sockaddr_in clnt_adr;socklen_t clnt_adr_sz;if(argc != 2){printf("usage : %s <port>\n",argv[0]);exit(1);}serv_sock = socket(PF_INET,SOCK_STREAM,0);if(serv_sock == -1)error_handling("socket() error");memset(&serv_adr,0,sizeof(serv_adr));serv_adr.sin_family = AF_INET;serv_adr.sin_addr.s_addr=htonl(INADDR_ANY);serv_adr.sin_port=htons(atoi(argv[1]));if(bind(serv_sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr))==-1)error_handling("bind() error");if(listen(serv_sock,5)==-1)error_handling("listen() error");clnt_adr_sz=sizeof(clnt_adr);for(i=0;i<5;i++){clnt_sock=accept(serv_sock,(struct sockaddr*)&clnt_adr,&clnt_adr_sz);if(clnt_sock==-1)error_handling("accept() error");elseprintf("Connected client %d \n",i+1);//read(clnt_sock,server_recv_msg,sizeof(server_recv_msg));//printf("server recieve client %s\n",server_recv_msg);while((str_len=read(clnt_sock,message,BUF_SIZE))!=0) write(clnt_sock,message,sizeof(message));close(clnt_sock);}close(serv_sock);return 0;
}void error_handling(char *message)
{fputs(message,stderr);fputc('\n',stderr);exit(1);}
echo_client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>#define BUF_SIZE 1024
void error_handling(char * message);int main(int argc, char * argv[])
{int sock;char message[BUF_SIZE];int str_len;struct sockaddr_in serv_adr;if(argc != 3){printf("Usage : %s <IP><PORT>\n",argv[0]);exit(1);}sock=socket(PF_INET,SOCK_STREAM,0);if(sock == -1)error_handling("socket() error");memset(&serv_adr,0,sizeof(serv_adr));serv_adr.sin_family=AF_INET;serv_adr.sin_addr.s_addr=inet_addr(argv[1]);serv_adr.sin_port=htons(atoi(argv[2]));if(connect(sock,(struct sockaddr*)&serv_adr,sizeof(serv_adr))==-1)error_handling("connect() error !");elseputs("connected.........");while(1){fputs("Input message(Q to quit): ",stdout);fgets(message,BUF_SIZE,stdin);if(!strcmp(message,"q\n") || !strcmp(message,"Q\n"))break;write(sock,message,strlen(message));str_len=read(sock,message,BUF_SIZE-1);message[str_len]=0;printf("Message from server : %s",message);}close(sock);return 0;
}void error_handling(char * message){fputs(message,stderr);fputc('\n',stderr);exit(1);
}
运行示意图:
Artical--2--TCP_IP服务器端/客户端迭代一相关推荐
- Artical--3--TCP_IP服务器端/客户端迭代二--通过服务器端进行计算
Artical–3--TCP_IP服务器端/客户端迭代二–通过服务器端进行计算 这次的迭代是:客户端发送数据给客户端,然后选择"+"法或"*"法,服务器端计算之 ...
- 四 基于TCP的服务器端/客户端
** 第四章 基于TCP的服务器端/客户端(1) ** 主要内容: 这里我们讨论通过套接字收发数据 1.TCP与UDP的区别数据传输方式不同 2.协议栈的层次关系:链路层->IP层->tc ...
- udp协议服务器客户端流程图,UDP 协议通信服务器端客户端.doc
UDP 协议通信服务器端客户端 UDP 协议进行通信 --服务器端 UDP程序实例的基本使用情况和使用方法 这个系统由服务器程序udps和客户及程序udpc两个程序组成,如果从客户机出入一个特定命令, ...
- 创建收发文件的服务器端 客户端,TCP/IP网络编程 Chap.5 基于TCP的服务器端/客户端(2)...
已知字符串长度情况下完善回声客户端 # gcc echo_client2.c -o eclient2 # ./eclient2 127.0.0.1 9190 Connected Input messa ...
- TCP/IP网络编程_第6章基于UDP的服务器端/客户端
6.1 理解 DUP 我们在第4章学习TCP的过程中, 还同时了解了 TCP/IP 协议. 在4层TCP/IP模型中, 上数第二层传输(Transport)层分为TCP和UDP这两种. 数据交换过程可 ...
- C#+Socket 聊天室(实现公网通信 客户端-服务器端-客户端)
文章目录 简述 功能演示视频(b站) 准备工作 服务器端 服务器端界面 服务器端代码 客户端 客户端界面 客户端代码 总结 简述 关于Socket的原理我就不在这里赘述了,有大佬已经作详细的说明了: ...
- 采用 bsdiff 开源库 Android 的增量更新,差分更新 服务器端客户端
Incremental-update-master 项目地址: ccj659/Incremental-update-master 简介:采用 bsdiff 开源库 Android 的增量更新,差分更新 ...
- Linux网络编程 - 基于UDP的服务器端/客户端
一 理解UDP 1.0 UDP协议简介 UDP(User Datagram Protocol,用户数据报协议) [RFC 768] UDP协议的数据传输单元叫 UDP用户数据报,而TCP协议的数据传输 ...
- 蒲公英的虚拟服务器,蒲公英服务器端客户端 for Windows 使用教程
好消息!目前蒲公英组网平台服务端客户端已经正式上线啦!~ 蒲公英服务器版客户端主要用于在服务器端安装使用,和已有访问者客户端相同均具可作为软件成员加入到组网内实现互联互通,但整体界面为全新样式,新增云 ...
最新文章
- Leetcode 350 两个数的交集2
- insert式注射攻击解析
- 拯救者Y7000P 2020H款安装deepin20.5后资源空闲时经常出现风扇狂转现象
- linux unix mac windows,文件路径-windows上的反斜杠和Mac OS/Linux/Unix上的正斜杠,Windows,倒,以及,macOSLinuxUNIX...
- 理解 Linux/Unix 登录脚本
- Facebook 开源 M2M-100,不依赖英语互译百种语言
- SSH远程执行命令环境变量问题
- python打开文件夹中的tiff_浅谈python下tiff图像的读取和保存方法
- 对比科大讯飞,云知声等国内语音识别团队的实力表现如何?
- 数学建模学习交流论文写作课件
- Block 循环引用(中)
- pillow 保存图像路径_python利用pillow包处理图片
- win10系统怎么设置网卡优先级
- 青龙面板2.9,以及wskey自动转换ck配置
- Viusal 各个版本离线镜像
- 云计算技术 - 基础环境搭建
- Accessing non existent property lineno of module
- 使用ALLHiC基于HiC数据辅助基因组组装
- 4个知识点帮你理清ARM开发思路!
- var和let和const_用故事讲解JavaScript的var,let和const变量