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模块的,博主在研 ...
随机推荐
- abap Excel 导入
ABAP 将EXECL数据导入SAP内表的几个步骤. 本文转自:http://blog.csdn.net/szlaptop/article/details/8663451 http://www.c ...
- ABAP下载xml文件
[转http://www.cnblogs.com/byfhd/archive/2007/08/17/859829.html] ************************************* ...
- 股票技术指标中的VOL,KDJ,MACD,OBV,VR,DMA分别代表什么意思?很关键,谢谢
http://zhidao.baidu.com/link?url=glKK7n0JUgqgrvfx2Gzd937-5zZg1bC615MwAp0P_mrYDytnMUpjoOQgYU871ny8St1 ...
- spring 注解事务
前提:在applicationContext.xml中配置<tx:annotation-driven transaction-manager="transactionManager&q ...
- HDU - 1598 find the most comfortable road 【最小生成树】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1598 思路 用kruskal 算法 将边排序后 跑 kruskal 然后依次将最小边删除 再去跑 kr ...
- spring项目命名
groupId 一般分为多个段,最简单的分两段,第一段为域,第二段为公司名称.域又分为org.com.cn等等许多, 举个apache公司的tomcat项目例子:这个项目的groupId是org.ap ...
- web框架之Django<一、初识>
一.什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的 ...
- Windows Server 2008无损调整分区的方法
今天在装windows2008服务器的时候 发现系统只有C盘 该如何对C盘进行分区呢 windows2007 可以直接格式化 在windows2008服务器中格式化是灰色的 不能用 寻求 ...
- redis配置参数的热修改
Redis使用config命令,可以对配置项参数热修改,不必重启. Redis最好不要重启,重启一次会引发如下问题: 如果数据很多(例如几个G),读起来很慢: 重启风险很大,Redis有内存陷阱 重启 ...
- 2015 ETSI NFV用例指南
译者简介:忍忍鱼,曾经从SDNLAB获取了很多知识,现在努力为SDNLAB贡献自己的力量.爱学习,求进步!SDNLAB,么么哒! ETSI NFV ISG已经确定了9个潜在的NFV用例.本章节简单介绍 ...