C语言实现TCP服务器与客户端通信
以上是TCP通信客户端与服务器实现通信的基本原理流程图。
1、客户端的实现(4个步骤)
1.1创建socket对象
1.2请求连接
1.3发送数据
1.4关闭套接字
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netinet/ip.h>
#include<sys/types.h>
int main(int argc,char *argv[])
{
//入参判断
if(argc < 2)
{
printf("参数有误");
return -1;
}
//1.创建socket对象(流式套接字)
//2.设置服务器端的ip地址和接口
//3.请求连接
//4.发送数据
//5.关闭socket对象
//1.创建socket对象(流式套接字)
int tcp_socket = socket(AF_INET,SOCK_STREAM,0);
if(tcp_socket < 0)
{
perror("socket error");
return -1;
}
//1.1设置服务器端的ip地址和端口号
//定义结构体并为其赋值
struct sockaddr_in server;
server.sin_family = AF_INET;//IPV4协议
server.sin_port = htons(atoi(argv[2]));//端口号
server.sin_addr.s_addr = inet_addr(argv[1]);//网络字节序
//2.请求连接
if(connect(tcp_socket,(struct sockaddr *)&server,sizeof(server)) < 0)
{
perror("connect error");
return -1;
}
//3.发送消息
char buf[20] = {0};
printf("tftp>");
fgets(buf,sizeof(buf),stdin);//从键盘写入数据到缓冲区
send(tcp_socket,buf,strlen(buf),0);//将缓冲区的数据写入socket
//4关闭socket对象
close(tcp_socket);
return 0;
}
提示:ip地址和端口号均采用主函数传参的方式输入。加入步骤3的目的是为了用发送消息的方式检验是否能正常通信。具体的每个函数中所用到的参数就不做详细的介绍了可利用(man 函数名)的方式查询。
2. 服务器的实现(6个步骤)
2.1创建socket对象
2.2绑定套接字
2.3启动监听
2.4接收连接请求
2.5接收客户端数据
2.6关闭socket对象
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netinet/ip.h>
#include<sys/types.h>
int main(int argc,char *argv[])
{
//入参判断
if(argc < 3)
{
printf("参数有误");
return -1;
}
//1.创建socket对象(流式套接字) socket()
//2.设置服务器端的ip地址和端口号 struct sockaddr_in
//3.绑定自己的ip地址和端口号 bind()
//4.监听socket对象 listen()
//5.接受连接 accept()
//6.接受连接后进行操作
//7.关闭socket对象 close()
//1.创建socket对象(流式套接字)
int socket_fd = socket(AF_INET,SOCK_STREAM,0);
if(socket_fd < 0)
{
perror("socket error");
return -1;
}
//1.1设置服务器端的ip地址和端口号
//定义结构体并为其赋值
struct sockaddr_in server;
server.sin_family = AF_INET;//IPV4协议
server.sin_port = htons(atoi(argv[2]));//端口号
server.sin_addr.s_addr = inet_addr(argv[1]);//网络字节序
//2.绑定自己的ip地址和端口号
if(bind(socket_fd,(struct sockaddr *)&server,sizeof(server)) < 0)
{
perror("bind error");
return -1;
}
//3.监听socket对象
int ret = listen(socket_fd,5);
if(ret < 0)
{
perror("listen error");
return -1;
}
//4.接收连接
int newfd = 0;//接收新的socket对象
struct sockaddr_in client;
int len = sizeof(client);
newfd = accept(socket_fd,(struct sockaddr *)&client,&len);//通过参数2 获得客户端信息
if(newfd < 0)
{
perror("accept error");
return -1;
}
//输出客户端信息
printf("cilent ip=%s port=%d\n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));
//5.接收数据
char buf[20] = {0};
recv(newfd,buf,sizeof(buf),0);
printf("%s\ny",buf);
//6.关闭socket对象
close(newfd);
提示:在连接成功后会产生一个新的socket对象newfd,在之后的操作中用的是newfd而不是最开始创建的socket_fd。
C语言实现TCP服务器与客户端通信相关推荐
- 【TCP网络编程】C语言实现TCP服务器和客户端之间的通信(linux)
功能描述 利用TCP网络通信实现客户端和服务器的通信 服务器代码 server.c #include<stdio.h> #include<sys/socket.h> #incl ...
- QT网络编程——TCP服务器和客户端通信
目录 一.服务器端 1.QT中TCP服务器的开发思路 2.QT服务器界面设计 3.QT服务器代码实现 二.客户端 1.QT中TCP客户端的开发思路 2.QT客户端界面设计 3.QT客户端代码实现 网络 ...
- nodejs TCP服务器和客户端通信的socket结构
这个结构我们大学时上Unix网络编程的专业课就学过了: nodejs服务器端调用net模块的createServer方法启动一个TCP服务器,这个方法要指定一个回调函数,每当新的客户端发起连接后,回调 ...
- 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信
基于Python Tkiner.thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信 完整代码下载地址:基于Python Tkiner.thread与soc ...
- python 实现TCP socket通信和 HTTP服务器、服务器和客户端通信python实例
python 实现TCP socket通信和 HTTP服务器.服务器和客户端通信实例 socket是什么? 服务器和客户端通信的流程 python 实现TCP socket通信例子 关于Host和PO ...
- Qt 零基础设计实现TCP服务器和客户端上位机(零基础实战详解,附源码文件)
文章目录 TCP和UDP TCP的三次握手和四次分手 TCP和UDP的区别 关于Socket(套接字) Qt TCP服务器的设计与实现 使用Qt的 帮助 TCP服务器和客户端 区别 UI界面设计和原则 ...
- python应用系列教程——python使用socket创建tcp服务器和客户端
全栈工程师开发手册 (作者:栾鹏) python教程全解 python使用socket创建tcp服务器和客户端. 服务器端为一个时间戳服务器,在接收到客户端发来的数据后,自动回复. 客户端,等待用户输 ...
- TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子)
TCP服务器和客户端的链接例子(侧重点在注意关闭套接子,减少套接子的描述子) 每个文件或套接口都有一个访问计数,该访问计数在文件表项中维护,它表示当前指向该文件或套接口的打开的描述字个数. 每个文件, ...
- 服务器主动发送fin信号,tcp 服务器向客户端发送FIN
tcp 服务器向客户端发送FIN 内容精选 换一换 ELB的常见异常返回码有400.403.502.504等.若遇到这些返回码建议您先直接访问后端云服务器,查看是否是后端云服务器的异常.若后端云服务器 ...
最新文章
- 浅说——九讲背包之01背包
- CCNA和四级网工的对比
- 乱想-HTTP请求常用对象
- java instanceof 动态_Java关键字instanceof用法及实现策略
- 前端笔记-对webpack和vue的基本认识
- linux下搭建博客Day8
- 股市像脱缰的“野牛”,谁是最好的“牛崽”?
- 集线器、交换机和路由器之间的区别
- 库ppt演示 python_用Python实现PPT转化图片
- C# 客户端手动配置数据证书 WCF Certificate
- 学习NA,Dynamips实验环境(工大瑞普)下载地址
- vue+three.js导入obj模型不显示问题
- Robotium-基础理论介绍
- python做erp系统的可行性_ERP可行性分析
- Alpha 事后诸葛亮(团队)
- 【转载】转别人写的HTMLCSS 详细笔记脉络--很详细
- java.lang.IllegalStateException: Shutdown in progress
- led显示屏p10参数设置_如何看P10显示屏参数
- 马氏快速记星座法——5分钟快速记忆星座和月份!超快!超准!超实用!
- 第十三章 使用动态SQL(二)
热门文章
- 柏西机器人_哪些动画和漫画中精彩的打斗片段让你念念不忘?
- (4/4) Biweekly Contest 42
- Java 集合的有序和无序总结
- ping 广播ip地址发发生的一些事情
- 买卖汽车电商交易平台、选车社区论坛、买新车、二手车交易平台、移动端汽车电商平台、web端汽车运营管理平台、供应商管理、营销商管理、新车交易管理、调车管理、汽车顾问、车库管理、出入库管理、Axure原型
- linux ntp时间源服务器,NTP时间服务器
- 使用delphi+intraweb进行微信开发4—微信消息加解密
- JavaWeb:request.getSession().invalidate()与request.getSession().removeAttribute()的区别
- session的removeAttribute()和invalidate()的区别 1
- php返回302,php使用curl请求返回302(30x)