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. Apache Shiro 使用手册(二)Shiro 认证(转发:http://kdboy.iteye.com/blog/1154652)

    认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的“实体/凭证”组合便是“用户名/密码”组合. 一. ...

  2. Java并发之BlockingQueue

      一.Queue Queue是队列接口是 Collection的子接口.除了基本的 Collection操作外,队列还提供其他的插入.提取和检查操作.每个方法都存在两种形式:一种抛出异常(操作失败时 ...

  3. Data Structure Array: Sort elements by frequency

    http://www.geeksforgeeks.org/sort-elements-by-frequency-set-2/ #include <iostream> #include &l ...

  4. Python 3 并发编程多进程之进程同步(锁)

    Python 3 并发编程多进程之进程同步(锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,竞争带来的结果就是错乱,如何控制,就是加锁处理. 1. ...

  5. 斯坦福机器学习视频笔记 Week3 逻辑回归与正则化 Logistic Regression and Regularization

    我们将讨论逻辑回归. 逻辑回归是一种将数据分类为离散结果的方法. 例如,我们可以使用逻辑回归将电子邮件分类为垃圾邮件或非垃圾邮件. 在本模块中,我们介绍分类的概念,逻辑回归的损失函数(cost fun ...

  6. WebSocket实现Web聊天室

    一.客户端: JS代码如下: /* * 这部分js将websocket封装起来 */ var websocket = null; //判断当前浏览器是否支持WebSocket if ('WebSock ...

  7. Ogre场景编辑器Ogitor源代码的构建

    本文转自:http://blog.csdn.net/zhengkangchen/article/details/6000769 Ogitor-0.4.2源代码构建,不少时间,这里记录一下: 下载源代码 ...

  8. Struts 2简介

    Struts 2简介 Struts 2 编辑 同义词 Struts2一般指Struts 2 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中 ...

  9. Spring MVC工作原理(好用版)

    Spring MVC工作原理 参考: SpringMVC工作原理 - 平凡希 - 博客园https://www.cnblogs.com/xiaoxi/p/6164383.html SpringMVC的 ...

  10. WEB安全之Token浅谈

    Token一般用在两个地方——防止表单重复提交.anti csrf攻击(跨站点请求伪造). 两者在原理上都是通过session token来实现的.当客户端请求页面时,服务器会生成一个随机数Token ...