Linux TCP通信例子
TCP通信的C/S模型
///server.c
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#define PORT 4321
#define BUFFER_SIZE 1024
#define MAX 5
#include <pthread.h>
int main()
{ struct sockaddr_in servaddr;
int sockfd,client_fd;
char buf[BUFFER_SIZE]; /*建立socket连接*/
if((sockfd=socket(AF_INET,SOCK_STREAM,))==-)
{
perror("socket");
exit();
} printf("socket id=%d\n",sockfd);
/*设置sockaddr_in结构体中相关参数*/
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(PORT);
servaddr.sin_addr.s_addr=INADDR_ANY;
int i=; /*允许重复使用本地址与套接字进行绑定*/
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));
/*绑定函数bind()*/ if(bind(sockfd,(struct sockaddr *) &servaddr,sizeof(servaddr))==-)
{
perror("bind");
exit();
} printf("Bind success!\n");
/*调用listen函数,创建未处理请求的队列*/
if(listen(sockfd,MAX)==-)
{
perror("listen");
exit();
} printf("Listen...\n"); /*调用accept函数,等待客户端连接*/
if((client_fd=accept(sockfd,NULL,NULL))==-)
{
perror("accept");
exit();
}
/*调用recv()函数接收客户端的请求*/
memset(buf,,sizeof(buf)); if(recv(client_fd,buf,BUFFER_SIZE,)==-)
{
perror("recv");
exit();
} printf("Received a message:%s\n",buf);
close(sockfd);
exit();
}
///client.c
/*
TCP通讯的client端; */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include<arpa/inet.h>
#define BUFFER_SIZE 100 int main(int argc,char *argv[])
{
int sockfd,client_fd;
char buf[BUFFER_SIZE];
struct sockaddr_in servaddr; if(argc<)
{
printf("USAGE=%s <serv_in> <serv_port>\n",argv[]);
exit(-);
} // memset(buf,0,sizeof(buf)); /*创建socket*/
if((sockfd=socket(AF_INET,SOCK_STREAM,))==-)
{
perror("socket");
exit(-);
} /*创建sockaddr_in结构体中相关参数*/
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(atoi(argv[]));
servaddr.sin_addr.s_addr= inet_addr(argv[]);
/*调用connect函数主动发起对服务端的链接*/ if(connect(sockfd,(struct sockaddr *) &servaddr,sizeof(servaddr))==-)
{
perror("connect");
exit(-);
}
/*发送消息给服务端*/
while()
{
scanf("%s",buf);
if(send(sockfd,buf,strlen(buf),)==-)
{
perror("send");
exit(-);
}
memset(buf,,sizeof(buf)); if(recv(client_fd,buf,BUFFER_SIZE,)==-)
{
perror("recv");
exit();
} printf("Received a message:%s\n",buf);
}
close(sockfd);
exit();
}
Linux TCP通信例子的更多相关文章
- Linux UDP通信例子
UDP C/S编程的步骤如下图所示 ////server.c #include <sys/types.h> #include <sys/socket.h> #include&l ...
- udp和tcp通信
一.参考文档 1.从UDP的”连接性”说起–告知你不为人知的UDP 2.Linux UDP通信例子
- QT实现TCP通信服务器端和客户端(支持多个客户端)精简版
上星期接了个私活,工期两星期,报酬3000,写一个小软件,采集定向网络上的数据,并进行双向通信,捣鼓了两天,终于把QT中tcp通信这块调通了,找过N多例子,绝大部分都是基本的一个服务端一个客户端通信的 ...
- 性能测试基础 ---TCP通信过程的状态码与过程,以及出现错误码的分析(TIME_WAIT,CLOSE_WAIT)
TCP通信过程 如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手).数据传输.断开TCP连接通道(四次挥手). 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过 ...
- 清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)C#版
目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程, ...
- [C语言]一个很实用的服务端和客户端进行TCP通信的实例
本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...
- 【iCore2双核心板视频教程二】iM_LAN 100M 以太网模块TCP通信例程
============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...
- TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示
今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...
- UE4 Sockets多线程TCP通信
转自:https://blog.csdn.net/zilisen/article/details/75007447 一.简介 UE4引擎是提供了Sockets模块和Networking模块的,博主在研 ...
随机推荐
- R语言set.seed()函数介绍
set.seed(),该命令的作用是设定生成随机数的种子,种子是为了让结果具有重复性.如果不设定种子,生成的随机数无法重现.这个函数的主要目的,是让你的模拟能够可重复出现,因为很多时候我们需要取随机数 ...
- ARDUINO MEGA2560 经过ESP8266 WIFI模块上传温湿度数据到 OneNet 服务器
简述 原来写了一个C++的wifi库但是发现用c++ arduino这小身板有点扛不住,代码比较大,使用String类型数据处理速度慢,而且很容易无缘无故跑飞.而且封装成库后使用还需要修改arduin ...
- Yii2 如何实现表单事件之 Ajax 提交
前言 Yii2 现在使用 JS 都必须要注册代码了. 要实现 Ajax 提交,有两种方法.一是直接在 ActiveForm 调用 beforeSubmit 参数,但是个人认为这样没有很好的把 JS 和 ...
- 装箱问题【STL】
7-9 装箱问题(20 分) 假设有N项物品,大小分别为s1.s2.-.si.-.sN,其中si为满足1≤si≤100的整数.要把这些物品装入到容量为100的一批箱 ...
- WampServer修改MySQL密码的问题
WAMP安装好后,mysql密码是为空的,那么要如何修改呢?其实很简单,通过几条指令就行了,下面我就 一步步来操作. 首先,通过WAMP打开mysql控制台. 提示输入原密码,如果是空,直接按 ...
- [原创]java WEB学习笔记02:javaWeb开发的目录结构
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- JS饼状图表数据分布插件
在线演示 本地下载
- 斐波那契数列F(n)【n超大时的(矩阵加速运算) 模板】
hihocoder #1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个 ...
- codeforces 686B
题意:给出一个序列,只允许进行相邻的两两交换,给出使序列变为非降序列的操作方案. 思路:关键点是操作次数不限,冒泡排序. #include<iostream> #include<cs ...
- NTFS文件系统的主要优点体现在以下三个方面
1.NFTS格式具有用户权限的控制管理功能 2.NTFS有更好的压缩率 3.NTFS具有日志功能,可以提高系统安全性