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通信例子的更多相关文章

  1. Linux UDP通信例子

    UDP C/S编程的步骤如下图所示 ////server.c #include <sys/types.h> #include <sys/socket.h> #include&l ...

  2. udp和tcp通信

    一.参考文档 1.从UDP的”连接性”说起–告知你不为人知的UDP 2.Linux UDP通信例子

  3. QT实现TCP通信服务器端和客户端(支持多个客户端)精简版

    上星期接了个私活,工期两星期,报酬3000,写一个小软件,采集定向网络上的数据,并进行双向通信,捣鼓了两天,终于把QT中tcp通信这块调通了,找过N多例子,绝大部分都是基本的一个服务端一个客户端通信的 ...

  4. 性能测试基础 ---TCP通信过程的状态码与过程,以及出现错误码的分析(TIME_WAIT,CLOSE_WAIT)

    TCP通信过程 如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手).数据传输.断开TCP连接通道(四次挥手). 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过 ...

  5. 清晰易懂TCP通信原理解析(附demo、简易TCP通信库源码、解决沾包问题等)C#版

    目录 说明 TCP与UDP通信的特点 TCP中的沾包现象 自定义应用层协议 TCPLibrary通信库介绍 Demo演示 未完成功能 源码下载 说明 我前面博客中有多篇文章讲到了.NET中的网络编程, ...

  6. [C语言]一个很实用的服务端和客户端进行TCP通信的实例

    本文给出一个很实用的服务端和客户端进行TCP通信的小例子.具体实现上非常简单,只是平时编写类似程序,具体步骤经常忘记,还要总是查,暂且将其记下来,方便以后参考. (1)客户端程序,编写一个文件clie ...

  7. 【iCore2双核心板视频教程二】iM_LAN 100M 以太网模块TCP通信例程

    ============================== 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:h ...

  8. TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

    今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...

  9. UE4 Sockets多线程TCP通信

    转自:https://blog.csdn.net/zilisen/article/details/75007447 一.简介 UE4引擎是提供了Sockets模块和Networking模块的,博主在研 ...

随机推荐

  1. 使用javascript的eval函数解析json字符串,提示“not avalible”怎么办?

    按照最简单的形式,可以用下面这样的 JSON 表示"名称 / 值对": var jsonString = '{ "firstName": "Brett ...

  2. Javaweb基础--->过滤器filter(转发)

    一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...

  3. TS视频一

    ts文件 ts文件为传输流文件,视频编码主要格式h264/mpeg4,音频为acc/MP3. ts文件分为三层:ts层Transport Stream.pes层 Packet Elemental St ...

  4. 使用MAVEN手动创建web项目

    问题:如下图,使用maven创建webapp项目时,默认使用maven-archetype-webapp这个archetype,由于这个archetype比较古老,有如下缺点: 1. 默认生成的项目会 ...

  5. 构造代码块、构造函数、this执行顺序

    一.构造函数 对象一建立就会调用与之对应的构造函数. 构造函数的作用:可以用于给对象进行初始化. 构造函数的小细节:当一个类中没有定义构造函数时,系统会默认给该类加一个空参数的构造函数:当在类中自定义 ...

  6. java -ea

    两题考的都是 assert和assertionassert是JDK1.4(&+)中新增的关键字,其功能称作assertionassert 条件表达式            如果条件表达式不成立 ...

  7. zookeeper 实战案例分享:cruator客户端编程

    上两篇介绍了zookeeper服务器端的安装和配置,今天分享下利用zookeeper客户端编程来实现配置文件的统一管理,包括文件添加.删除.更新的同步. 比如,连接数据库信息的配置文件,一般每个应用服 ...

  8. 在ubuntu上为android系统编写Linux驱动程序【转】

    本文转载自:http://blog.csdn.net/luoshengyang/article/details/6568411 在智能手机时代,每个品牌的手机都有自己的个性特点.正是依靠这种与众不同的 ...

  9. Excel 2007中自定义数字格式前要了解的准则

    要在Excel 2007中创建自定义数字格式,首先应了解自定义数字格式的准则,并从选择某一内置数字格式开始.然后,可以更改该格式的任意代码部分,从而创建自己的自定义数字格式. 数字格式最多可包含四个代 ...

  10. 常量池、perm(持久代)、方法区、栈

      常量池.perm(持久代).方法区.栈 常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据. 除了包含代码中所定义的各种基本类型(如:int.long等等)和对象型(如St ...