linux C - TCP数据接收和发送示例
【推荐阅读】
浅谈linux 内核网络 sk_buff 之克隆与复制
深入linux内核架构--进程&线程
了解Docker 依赖的linux内核技术
1.client端(读)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>void error_handling(char *msg);int main(int argc, char *argv[])
{int sock_fd;struct sockaddr_in serv_addr;char message[30] = {0};int rcv_len;if (argc != 3){printf("Usage: %s <IP> <port>\n", argv[0]);exit(1);}sock_fd = socket(AF_INET, SOCK_STREAM, 0);if (sock_fd == -1)error_handling("sock() error");memset(&serv_addr, 0, sizeof(serv_addr));serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = inet_addr(argv[1]);// server's IP addrserv_addr.sin_port = htons(atoi(argv[2]));//portif (connect(sock_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)error_handling("connect() error!");rcv_len = read(sock_fd, message, sizeof(message) - 1);if (rcv_len == -1)error_handling("read() error!");printf("Message from server: %s\n", message);printf("read length : %d\n",rcv_len);close(sock_fd);return 0;
}void error_handling(char *message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}
如果是在client中发送数据,只需将read修改为write即可。
2.server(发送)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>void error_handling(char *msg);int main(int argc, char *argv[])
{int serv_sock_fd;int clnt_sock_fd;struct sockaddr_in serv_addr;struct sockaddr_in clnt_addr;socklen_t clnt_addr_size;char message[] = "This is a sample TCP¡sserver!";if (argc != 2){printf("Usage: %s <port>\n", argv[0]);exit(1);}serv_sock_fd = socket(AF_INET, SOCK_STREAM, 0);if (serv_sock_fd == -1)error_handling("sock() error");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]));if (bind(serv_sock_fd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) == -1)error_handling("bind() error");if (listen(serv_sock_fd, 5) == -1)error_handling("listen() error");clnt_addr_size = sizeof(clnt_addr);clnt_sock_fd = accept(serv_sock_fd, (struct sockaddr*)&clnt_addr, &clnt_addr_size);if (clnt_sock_fd == -1)error_handling("accept() error");write(clnt_sock_fd, message, sizeof(message));close(clnt_sock_fd);close(serv_sock_fd);return 0;
}void error_handling(char *message)
{fputs(message, stderr);fputc('\n', stderr);exit(1);
}
如果是在server端接收数据,只需将write修改为read即可。
3,以上,在Linux下分别gcc编译,先运行server程序,然后运行client程序,server端等待client的连接,一旦连接并完成数据发送,server关闭。
4,示例程序的server只能连接一个client端,并且未进行数据收发的正确性验证。
linux C - TCP数据接收和发送示例相关推荐
- 计算机网络课程设计——发送和接收TCP数据包以及发送和捕获ARP数据包
1.课程设计要求: 发送和接收TCP数据包:TCP是一种面向连接的.可靠的传输层协议.TCP协议工作在网络层IP协议的基础上.本课程设计的目的是设计一个发送和接收TCP数据包的程序,其功能是填充一个T ...
- linux c语言 udp 接收和发送数据用同一个端口_网络编程基础入门及TCP,UDP
1.网络编程入门 1.1 网络编程概述 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享 ...
- linux 内核 发送数据,linux 内核tcp数据发送的实现
在分析之前先来看下SO_RCVTIMEO和SO_SNDTIMEO套接口吧,前面分析代码时没太注意这两个.这里算是个补充. SO_RCVTIMEO和SO_SNDTIMEO套接口选项可以给套接口的读和写, ...
- linux数据包注释,关于 linux中TCP数据包(SKB)序列号的小笔记
关于 SKB序列号的小笔记 为了修改TCP协议,现在遇到了要改动tcp分组的序列号,但是只是在tcp_sendmsg函数中找到了SKB的end_seq 一直没有找到seq 不清楚在那里初始化了,就 ...
- Udp数据接收和发送代码
每一台电脑都有自己的ip地址,向指定的ip地址发数据,数据就发送到了指定的电脑.UDP通信只是一种通信方式而已,有了ip地址数据就能发送到指定的电脑了,但是呢!我把数据发送到电脑了,电脑中的哪个程序接 ...
- C#对串口数据接收、发送的处理
最近在做与设备进行串口通信交互的项目,然后简单记录一下过程 使用的winform应用程序 方式1 1.声明串口对象 或者直接在工具箱拖拽串口控件 本篇文章不采用拖拽工具箱控件 直接声明对象 声明串口对 ...
- linux c语言 udp 接收和发送数据用同一个端口_【Python学习笔记】80、UDP编程
TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包.但是,能不 ...
- Linux下TCP循环接收数据的方式
简介 服务器调用accept与客户端建立连接,连接建立成功后,会返回一个fd,表示这条了连接的文件描述符.之后调用recv函数接受连接的信息.根据recv函数的原型,需要服务器程序有一个接收缓冲区,实 ...
- 【iOS官方文档翻译】iOS的蓝牙连接、数据接收及发送
说明:苹果官方开发文档中涉及一些名词:Central(中心设备).Peripheral(外围设备).advertising(广告).Services(服务).Characteristic(特征)等,请 ...
最新文章
- NYOJ 143 第几是谁?
- 看我如何作死 | 网络延迟、网络丢包、网络中断一个都没落下过
- SAP Spartacus cost center list的数据源分析
- 互联网产品初期需求确定与数据库模型设计——基于Visio和Xmind
- 前端学习(2159):vuecli脚手架的配置和安装
- C++虚继承的实现原理、内存分布、作用
- 通过Java代码浅谈HTTP协议
- 垂死病中惊坐起_我如何开始恢复垂死的软件团队的过程
- SQL语句实现行转列
- curl命令php,php生成curl命令行的方法
- udp超过mtu长度 linux,TCP UDP 数据包长度(MSS)总结
- eclipse使用配置教程
- javascript开发植物大战僵尸网页版游戏源代码下载
- word打出计算机图形符号,word显示所有格式标记
- javascript书签工具
- PMP-7. 项目经理及其影响力
- html(5)知识点囊括
- Java实现简易联网坦克对战小游戏(内涵源码)//Java+Java游戏+拓展学习+资源分享
- 2022-2027年中国基金行业市场全景评估及发展战略规划报告
- html5超链接不加下划线,css怎么让超链接不加下划线