我的编程空间,编程开发者的网络收藏夹
学习永远不晚

tcp通信,客户端服务端

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

tcp通信,客户端服务端

进行过程 

//TCP通信的流程

//服务器端(被动接受连接的角色)

创建一个用于监听的套接字

        -监听:监听有客户端的连接

        -套接字:这个套接字其实就是一个文件描述符

将这个监听文件描述符和本地的IP和端口绑定(IP和端口就是服务器的地址信息)

        -客户端连接服务器的时候使用的就是这个IP和端口

设置监听,监听的fd开始工作

阻塞等待,当有客户端发起连接,解除阻塞,接受客户端的连接,会得到一个和客户端通信的套接字(fd)

通信

        -接收数据

        -发送数据

通信结束,断开连接

//客户端

创建一个用于通信的套接字(fd)

连接服务器,需要指定连接的服务器和IP和端口

连接成功了,客户端可以直接和服务器端通信

             -接收数据

             -发送数据

通信结束,断开连接

 

字节序转换函数

发送端总是把要发送的数据转换成大端字节序数据后再发送,而接收端直到对方传送过来的数据总数采用大端字节序,所以接收端可以自身采用的字节序决定是否对接收到的数据进行转换(小端机转换,大端机不转换)

网络字节序采用大端

 

 

IP地址转化

 比如用点分十进制字符串表示 IPv4 地址,以及用 十六进制字符串表示 IPv6 地址。但编程中我们需要先把它们转化为整数(二进制数)方能使用。而记录 日志时则相反,我们要把整数表示的 IP 地址转化为可读的字符串

 

 

tcp/ip协议族

struct sockaddr_in  {    sa_family_t sin_family;         in_port_t sin_port;    struct in_addr sin_addr;        unsigned char sin_zero[sizeof (struct sockaddr) -   __SOCKADDR_COMMON_SIZE -   sizeof (in_port_t) -   sizeof (struct in_addr)];  };struct in_addr{    in_addr_t s_addr;};

 端口复用

 

 套接字函数

 

 

 show me the Code

客户端代码

#include #include #include #include #include using namespace std;int main() {    int fd = socket(AF_INET, SOCK_STREAM, 0);    if (fd == -1) {perror("socket"); return -1;}    struct sockaddr_in seaddr;    inet_pton(AF_INET, "127.0.0.1",&seaddr.sin_addr.s_addr);    seaddr.sin_family = AF_INET;    seaddr.sin_port = htons(9999);    int ret = connect(fd, (struct sockaddr*)&seaddr,sizeof(seaddr));        if (ret == -1) {perror("connect"); return -1;}    while(1) {        char sendBuf[1024] = {0};        fgets(sendBuf, sizeof(sendBuf), stdin);        write(fd, sendBuf, strlen(sendBuf) + 1);        //接收        int len = read(fd, sendBuf, sizeof(sendBuf));        if (len==-1) {            perror("read");            return -1;        }else if(len > 1) {            printf("read buf = %s\n", sendBuf);        }else {            printf("服务器已经断开连……\n");            break;        }    }    close(fd);    return 0;    return 0;}

服务端代码

#include #include #include #include #include #include int main() {    //创建socket    int lfd = socket(AF_INET, SOCK_STREAM, 0);    if (lfd == -1) {        perror("socket");        return -1;    }    struct sockaddr_in seraddr;    seraddr.sin_family = AF_INET;    seraddr.sin_addr.s_addr = INADDR_ANY;    seraddr.sin_port = htons(9999);    //端口复用,防止服务器重启时之前绑定的端口还没有释放    //程序突然退出而系统没有释放端口    int optval = 1;    setsockopt(lfd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval));        //绑定    int ret = bind(lfd, (struct sockaddr*)&seraddr, sizeof(seraddr));    if(ret == -1) {        perror("bind");        return -1;    }    //监听    ret = listen(lfd, 8);    if(ret == -1) {        perror("listen");        return -1;    }    //接收客户端连接    struct sockaddr_in cliaddr;    socklen_t len = sizeof(cliaddr);    int cfd = accept(lfd, (struct sockaddr*)&cliaddr, &len);    if(cfd == -1) {        perror("accept");        return -1;    }    //获取客户端信息    char clilp[16];    inet_ntop(AF_INET, &cliaddr.sin_addr.s_addr, clilp, sizeof(clilp));    int cliPort = ntohs(cliaddr.sin_port);    //printf("client's ip is%s, ans port is %d\n", clilp, cliPort);    //接收客户端发来的数据    char recvBuf[1024] = {0};    while(1) {        int len = recv(cfd, recvBuf, sizeof(recvBuf), 0);        if(len == -1) {            perror("recv");            return -1;        }else if(len == 0) {            printf("客户端已经断开连接……\n");            break;        }else if(len > 0) {            printf("read buf = %s\n", recvBuf);        }        char sendBuf[1024] = {0};        fgets(sendBuf, sizeof(sendBuf), stdin);        //大写字符串发送给客户端        ret = send(cfd, sendBuf, strlen(sendBuf) + 1, 0);        if(ret == -1) {            perror("send");            return -1;        }    }    close(cfd);    close(lfd);    return 0;}

在linux编译即可

g++  客户端.cpp -o a.out

g++  服务端.cpp -o b.out

来源地址:https://blog.csdn.net/weixin_58183566/article/details/130054991

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

tcp通信,客户端服务端

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python创建tcp服务端和客户端

1.tcp服务端server 1 from socket import * 2 from time import ctime 3 4 HOST = '' 5 PORT = 9999 6 BUFSIZ = 1024 7 ADDR = (HO
2023-01-30

Python socket网络编程TCP/IP服务器与客户端通信

Python socket网络编程 初学 python,前段时间买了两本书《python 编程从入门到实践》《Python 核心编程第三版》,第一本书主要讲的是一些基本语法和一些基本的使用方法,而第二本则深入很多,自己看来也是一知半解,刚好
2022-06-04

python客户端与服务器端通信怎么实现

使用套接字进行Python客户端和服务器端通信分四步:创建服务器端、创建客户端端、发送和接收数据,关闭连接。示例代码展示了如何使用套接字在服务器端和客户端端之间建立连接、发送和接收数据。包括其他注意事项,例如防火墙配置、数据序列化和错误处理。
python客户端与服务器端通信怎么实现
2024-04-12

C#中如何实现服务端与客户端通信

这篇文章将为大家详细讲解有关C#中如何实现服务端与客户端通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#服务端与客户端通信实现实例:class Server { static voi
2023-06-17

ZooKeeper的客户端是如何与服务端通信的

ZooKeeper的客户端与服务端之间是通过TCP协议进行通信的。客户端在与服务端建立连接后,可以发送请求给服务端,并接收服务端的响应。客户端可以通过发送不同类型的请求(如创建节点、读取节点、更新节点等)来与服务端进行交互。服务端在接收到客
ZooKeeper的客户端是如何与服务端通信的
2024-03-07

nodejs socket服务端和客户端简单通信功能

本文实例讲述了通过node.js的net模块实现nodejs socket服务端和客户端简单通信功能,可以用作客户端对服务端的端口监听以及事件回执。 server端代码var net = require('net'); //模块引入 var
2022-06-04

C#中怎么实现服务端与客户端通信

C#中怎么实现服务端与客户端通信,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#服务端与客户端通信实现实例:TcpClient client; for (
2023-06-17

python客户端与服务器端通信怎么实现

Python客户端与服务器端通信可以通过套接字(socket)实现。1. 服务器端首先需要创建一个套接字,并绑定到指定的IP地址和端口上:```pythonimport socket# 创建一个套接字对象server_socket = so
2023-09-08

Android编程实现TCP、UDP客户端通信功能示例

本文实例讲述了Android编程实现TCP、UDP客户端通信功能。分享给大家供大家参考,具体如下: 在进行Android开发的过程中,免不了,要开发TCP/UDP通讯的程序,下面这两段代码,分别介绍了TCP/UCP通过的一个实例: 代码一
2022-06-06

python TCP多客户端连接

Python TCP服务端代码:# coding=utf-8# !/usr/bin/env python    from socket import *from time import ctimeimport threadingimport
2023-01-31

Python基于socket怎么实现TCP客户端和服务端

这篇文章主要讲解了“Python基于socket怎么实现TCP客户端和服务端”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python基于socket怎么实现TCP客户端和服务端”吧!一、基
2023-06-30

编程热搜

目录