iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >tcp通信,客户端服务端
  • 855
分享到

tcp通信,客户端服务端

tcp/ip服务器网络 2023-09-09 15:09:57 855人浏览 独家记忆
摘要

进行过程  //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

--结束END--

本文标题: tcp通信,客户端服务端

本文链接: https://www.lsjlt.com/news/401661.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • tcp通信,客户端服务端
    进行过程  //TCP通信的流程 //服务器端(被动接受连接的角色) 创建一个用于监听的套接字         -监听:监听有客户端的连接         -套接字:这个套接字其实就是一个文件描述符 将这个监听文件描述符和本...
    99+
    2023-09-09
    tcp/ip 服务器 网络
  • TCP实现服务器和客户端通信
    目录 TCP介绍 代码实现 server(服务器端) 代码分析 client(客户端) 代码分析 结果展示 TCP介绍 TCP (Transmission Control Protocol) 是一种面向连接的协议,用于在计算机网络中传...
    99+
    2023-09-06
    tcp/ip 服务器 网络
  • 服务端和客户端通信-TCP(含完整源代码)
    简单TCP通信实验 目录 简单TCP通信实验 分析 1、套接字类型 2、socket编程步骤 3、socket编程实现具体思路 实验结果截图 程序代码 实验设备:    目标系统:windows 软件工具:vs2022/VC6/dev ...
    99+
    2023-09-22
    tcp/ip 网络 服务器
  • 基于node的tcp客户端和服务端的简单通信
    目录1.简单介绍下TCP/IP2.服务端编程监听客户端连接接收数据和发送数据3.客户端编程4.一个小的登录系统1.简单介绍下TCP/IP TCP/IP是互联网相关协议的集合,分为以下...
    99+
    2024-04-02
  • QT实现TCP通信(服务器与客户端搭建)
    一、TCP通信框架 二、QT中的服务器操作 创建一个QTcpServer类对象,该类对象就是一个服务器调用listen函数将该对象设置为被动监听状态,监听时,可以监听指定的ip地址,也可以监听所有主机地址,可以通过指定端口号,也可以让服...
    99+
    2023-10-21
    服务器 tcp/ip 网络
  • python创建tcp服务端和客户端
    1.tcp服务端server 1 from socket import * 2 from time import ctime 3 4 HOST = '' 5 PORT = 9999 6 BUFSIZ = 1024 7 A...
    99+
    2023-01-30
    服务端 客户端 python
  • C++多线程实现TCP服务器端同时和多个客户端通信
    通讯建立后首先由服务器端发送消息,客户端接收消息;接着客户端发送消息,服务器端接收消息,实现交互发送消息。 服务器同时可以和多个客户端建立连接,进行交互; 在某次交互中,服务器端...
    99+
    2024-04-02
  • C#中怎么实现服务端与客户端通信
    C#中怎么实现服务端与客户端通信,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#服务端与客户端通信实现实例:TcpClient client;&nb...
    99+
    2023-06-17
  • C#中如何实现服务端与客户端通信
    这篇文章将为大家详细讲解有关C#中如何实现服务端与客户端通信,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#服务端与客户端通信实现实例:class Server {&n...
    99+
    2023-06-17
  • ZooKeeper的客户端是如何与服务端通信的
    ZooKeeper的客户端与服务端之间是通过TCP协议进行通信的。客户端在与服务端建立连接后,可以发送请求给服务端,并接收服务端的响...
    99+
    2024-03-07
    ZooKeeper
  • python客户端与服务器端通信怎么实现
    Python客户端与服务器端通信可以通过套接字(socket)实现。1. 服务器端首先需要创建一个套接字,并绑定到指定的IP地址和端...
    99+
    2023-09-08
    python 服务器
  • Python基于socket实现TCP客户端和服务端
    目录一、基于socket实现的TCP客户端二、基于socket实现的TCP服务端三、socket实现的多任务版TCP服务端1、面向对象版本一、基于socket实现的TCP客户端 im...
    99+
    2024-04-02
  • Lwip TCP/UDP客户端、服务器详解
    一、TCP客户端         tcp客户端实现是比较简单的,大致分为以下几个步骤:      (1)申请套接字。      (2)绑定远端服务器的ip地址和端口。      (3)连接远端服务器。      (4)接收和发送数据。 #d...
    99+
    2023-09-24
    服务器 tcp/ip udp 单片机 网络协议
  • python TCP多客户端连接
    Python TCP服务端代码: # coding=utf-8 # !/usr/bin/env python    from socket import * from time import ctime import threading...
    99+
    2023-01-31
    客户端 python TCP
  • 客户端Socket与服务端ServerSocket串联实现网络通信
    目录引导语1、类属性2、初始化3、bind4、accept5、面试题5.1、说说你对Socket和ServerSocket的理解?5.2、说说对SocketOptions中的SO_T...
    99+
    2024-04-02
  • Python基于socket怎么实现TCP客户端和服务端
    这篇文章主要讲解了“Python基于socket怎么实现TCP客户端和服务端”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python基于socket怎么实现TCP客户端和服务端”吧!一、基...
    99+
    2023-06-30
  • Pythonsocket如何实现服务端和客户端数据传输(TCP)
    目录socket服务端和客户端数据传输(TCP)socket服务端,客户端互相通信socket服务端和客户端数据传输(TCP) 服务器端: import socket #创建一个so...
    99+
    2024-04-02
  • python中如何实现客户端通信
    这篇文章将为大家详细讲解有关python中如何实现客户端通信,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、实现流程创建一套接字。用connect()函数连接到服务器。使用sendall()向服务器发送...
    99+
    2023-06-15
  • python利用socket实现客户端和服务端之间进行通信
    目录一、socketsocket通信的条件:IP和端口形象比喻二、客户端实现过程三、服务器实现过程四、演示五、实现持续通信过程前言: 今天教大家通过Python进行Socket网络编...
    99+
    2024-04-02
  • nodejs如何实现TCP服务器端和客户端聊天功能
    这篇文章主要介绍了nodejs如何实现TCP服务器端和客户端聊天功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:服务器端var&...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作