Socket实现服务器和客户端(手把手教会)

这篇具有很好参考价值的文章主要介绍了Socket实现服务器和客户端(手把手教会)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😎 作者介绍:我是程序员行者孙,一个热爱分享技术的制能工人。计算机本硕,人工制能研究生。公众号:AI Sun,视频号:AI-行者Sun
🎈 本文专栏:本文收录于《网络编程实战》系列专栏,相信一份耕耘一份收获,我会手把手教分享网络编程实战内容,届时可以拳打字节,脚踢腾讯
🤓 欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深度学习从0到1系列文章。
🖥 随时欢迎您跟我沟通,一起交流,一起成长、进步!

socket编程服务端操作,大厂面试题,网络编程实战,服务器,运维,leetcode,算法,c++

socket编程服务端操作,大厂面试题,网络编程实战,服务器,运维,leetcode,算法,c++

Socket 编程是一种用于在网络上进行通信的编程方法,以下代码可以实现在不同主机之间传输数据。 

Socket 编程中服务器端和客户端的基本步骤:
服务器端步骤:

1.创建 Socket:

int serverSocket = socket(AF_INET, SOCK_STREAM, 0);
  • 使用 socket 函数创建一个套接字。
  • AF_INET 表示使用 IPv4 地址族。
  • SOCK_STREAM 表示使用 TCP 协议,如果使用 UDP,则为 SOCK_DGRAM。


2.绑定地址和端口:

   struct sockaddr_in serverAddress;
   serverAddress.sin_family = AF_INET;
   serverAddress.sin_addr.s_addr = INADDR_ANY;
   serverAddress.sin_port = htons(PORT);

   bind(serverSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress));
  • 初始化服务器地址结构体 sockaddr_in,设置 IP 地址和端口。
  • 使用 bind 函数将套接字绑定到指定的地址和端口。


3.监听连接请求:

   listen(serverSocket, BACKLOG);
  • 使用 listen 函数开始监听连接请求。
  • BACKLOG 参数指定连接请求队列的最大长度。


4.接受客户端连接:

   int clientSocket = accept(serverSocket, NULL, NULL);
  • 使用 accept 函数接受客户端的连接请求。
  • 返回一个新的套接字 clientSocket,用于与客户端通信。


5.接收和发送数据:
        使用 recv 函数从客户端接收数据,使用 send 函数向客户端发送数据。
关闭连接:

   close(clientSocket);
   close(serverSocket);


使用 close 函数关闭连接的套接字。

客户端步骤:

1. 创建 Socket:

  int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
  • 使用 socket 函数创建一个套接字。
  • 设置服务器地址和端口:
   struct sockaddr_in serverAddress;
   serverAddress.sin_family = AF_INET;
   serverAddress.sin_addr.s_addr = inet_addr(SERVER_IP);
   serverAddress.sin_port = htons(PORT);
  • 初始化服务器地址结构体 sockaddr_in,设置服务器的 IP 地址和端口。
  • 连接到服务器:
  connect(clientSocket, (struct sockaddr*)&serverAddress, sizeof(serverAddress));
  • 使用 connect 函数连接到服务器。
  • 发送和接收数据:
  • 使用 send 函数向服务器发送数据,使用 recv 函数从服务器接收数据。
  • 关闭连接:
 close(clientSocket);

使用 close 函数关闭连接的套接字。

解决分包、粘包问题

Socket实现模拟TCP通信粘包问题-CSDN博客

Client:

#include <iostream>
#include <string>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>

int main(){

    //1.创建socket
    int client_sock=socket(AF_INET,SOCK_STREAM,0);
    if (client_sock==-1)
    {
        std::cerr<<"Faild to create socket"<<std::endl;
        return -1;
    }

    //2.连接服务器

    struct sockaddr_in server_addr;
    server_addr.sin_family=AF_INET;
    //server_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
    inet_pton(AF_INET,"127.0.0.1",&server_addr.sin_addr.s_addr);
    server_addr.sin_port=htons(9999);

    if(connect(client_sock,(struct sockaddr*)&server_addr,sizeof(server_addr))==-1){
        std::cerr<<"Faild to connect socket"<<std::endl;
        return -1;
    }

    std::cout<<"Connected to server"<<std::endl;

    //3.数据交互

    //发送消息
    
    std::string msg="Hello server!\n";

    if(write(client_sock,msg.c_str(),msg.length())==-1){
        std::cerr<<"Faild to write "<<std::endl;
        return -1;
    }

    //接受消息

    char buffer[1024];
    if(read(client_sock,buffer,sizeof(buffer))==-1){
        std::cerr<<"Faild to read"<<std::endl;
        return -1;
    }

    printf("Receive to server :%s",buffer);

    close(client_sock);
    

}

Server:文章来源地址https://www.toymoban.com/news/detail-849343.html

#include <iostream>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <cstring>

int main(int, char**){
    //1.创建套接字
    int listen_sock=socket(AF_INET,SOCK_STREAM,0);

    if (listen_sock==-1)
    {
        std::cerr<<"Fiald to create socket"<<std::endl;
        return 1;
    }
    

    //2.绑定IP地址
    struct sockaddr_in server_addr;
    memset(&server_addr,0,sizeof(server_addr));

    server_addr.sin_addr.s_addr=INADDR_ANY;
    server_addr.sin_family=AF_INET;
    server_addr.sin_port=htons(9999);

    if(bind(listen_sock,(struct sockaddr*)&server_addr,sizeof(server_addr))==-1)
    {
        std::cerr<<"Fiald to bind socket"<<std::endl;
        return 1;
    }
    //3.监听套接字

    if (listen(listen_sock,5)==-1)
    {
        std::cerr<<"Fiald to listen socket"<<std::endl;
        return 1;
    }
    
    std::cout<<"server is listening"<<std::endl;

    //4.接受客户端的连接

    struct sockaddr_in client_addr;
    socklen_t client_addr_len=sizeof(client_addr);

    int client_sock=accept(listen_sock,(struct sockaddr*)&client_addr,&client_addr_len);

    if (client_sock==-1)
    {
        std::cerr<<"Fiald to accept socket"<<std::endl;
        return 1;
    }
    std::cout<<"a client connected"<<std::endl;

    //5.数据交互
    
    //接受消息

    char buffer[1024];
    int read_size=read(client_sock,buffer,sizeof(buffer));
    
    if (read_size==-1) 
    {
        std::cerr<<"Fiald to read"<<std::endl;
        return 1;
    }
    

    std::cout<<"Received to client :"<<buffer<<std::endl;
    std::string res_msg="Hello Client!";
    int wr=write(client_sock,res_msg.c_str(),res_msg.length());

    if (wr==-1)
    {
        std::cerr<<"Fiald to write"<<std::endl;
        return 1;
    }
    

    close(client_sock);
    close(listen_sock);

    



}

到了这里,关于Socket实现服务器和客户端(手把手教会)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#知识点-13(进程、多线程、使用Socket实现服务器与客户端通信)

    进程 定义:每一个正在运行的应用程序,都是一个进程  进程不等于正在运行的应用程序。而是为应用程序的运行构建一个运行环境 多线程 这段代码在执行完成之前,程序会被卡死(不能操作程序,包括关闭窗口)。因为我们程序在做一些耗时操作的时候,如果主线程去执

    2024年02月22日
    浏览(93)
  • 网络编程3——TCP Socket实现的客户端服务器通信完整代码(详细注释帮你快速理解)

    本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家点赞转发支持一下! 今天分享的内容是TCP流套接字实现的客户端与服务器的通信,一定要理解 DatagramSocket,DatagramPacket 这两个类的作用以及方法

    2024年02月12日
    浏览(63)
  • C# Socket通信从入门到精通(16)——单个同步UDP服务器监听多个客户端C#代码实现

    我们在开发UDP通信程序时,有时候我们也需要开发UDP服务器程序,这个服务器只需要和一个客户端实现通信,比如这篇博文C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现,但是在实际项目中有的时候需要和多个客户端进行通信,这时和一个客

    2024年01月22日
    浏览(64)
  • C# Socket通信从入门到精通(15)——单个同步UDP服务器监听一个客户端C#代码实现

    我们在开发UDP通信程序时,除了开发UDP客户端程序,有时候我们也需要开发UDP服务器程序,这在实际项目中是经常会遇到的,所以说掌握UDP服务器程序的开发是一项必备的技能,尤其在上位机软件开发领域,掌握UDP服务器程序的开发是走向高级工程师的必经之路,也是面试必

    2024年02月03日
    浏览(60)
  • Java【网络编程2】使用 TCP 的 Socket API 实现客户端服务器通信(保姆级教学, 附代码)

    📕各位读者好, 我是小陈, 这是我的个人主页 📗小陈还在持续努力学习编程, 努力通过博客输出所学知识 📘如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽 📙 希望我的专栏能够帮助到你: JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统

    2024年02月05日
    浏览(65)
  • python socket监测服务器和客户端连接状态

    服务器端和客户端的连接状态,应该是没有单独的函数返回或是接口监测的,看网上很多资料说需要监测心跳,这确实是一个普遍解决监测状态的办法,但是对我的项目却显得有些被动,其实对一般的项目包括我的,用try…except就可以满足,里面设置标志位,if判断一下就可

    2024年02月13日
    浏览(43)
  • Linux网络编程:socket、客户端服务器端使用socket通信(TCP)

    socket(套接字),用于网络中不同主机间进程的通信。 socket是一个伪文件,包含读缓冲区、写缓冲区。 socket必须成对出现。 socket可以建立主机进程间的通信,但需要协议(IPV4、IPV6等)、port端口、IP地址。          (1)创建流式socket套接字。                 a)此s

    2024年02月11日
    浏览(65)
  • C#搭建Socket服务器与客户端,助你快速入门(极简版)

    一、服务器的搭建 新建一个C#控制台应用,用于搭建服务器。 注:serverManager除了接收消息,也可以发送消息。基本除了监听,其他活它都干。 二、客户端的搭建 再建一个C#控制台应用,用于搭建客户端。 搭建好之后,先运行服务器端, 再运行客户端。 一个简单的服务器和

    2024年02月09日
    浏览(55)
  • 智能车上位机系统,pyqt下的socket通信,python实现服务器+客户端,文本+视频不定长字节传输,超详细,小白都能看懂

    目录 前言: 准备工作: 初级服务器端编写: 中级服务器端编写+客户端收数据函数实现: 数据包格式v1.0 客户端收数据函数V1.0 客户端分析1.0     本地测试:成功!      两台主机测试1.0:失败,视频解析失败,直接花屏了! 问题分析: 问题解决: 数据包格式V2.0 客户端接

    2024年04月17日
    浏览(47)
  • socket的使用 | TCP/IP协议下服务器与客户端之间传送数据

    谨以此篇,记录TCP编程,方便日后查阅笔记 注意:用BufferedWriter write完后,一定要flush;否则字符不会进入流中。去看源码可知:真正将字符写入的不是write(),而是flush()。 服务器端代码: 客户端代码: 运行后结果: 服务器端: 客户端: 参考资料: https://www.bilibili.com/vid

    2024年02月09日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包