代码编织梦想

一.TCP

1.TCP服务器搭建

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#define ERR_MSG(Msg) do{\
    fprintf(stderr,"__%d__:",__LINE__);\
    perror(Msg);\
}while(0)
#define IP "192.168.43.3"
#define PORT 8888
int main(int argc, const char *argv[])
{
  //创建字节流式套接字    
     int sdp=socket(AF_INET,SOCK_STREAM,0);
         if(sdp<0)
         {
             ERR_MSG("sdp");
             return -1;
         }
    //允许端口被重复使用
    int reuse = 1;
    if(setsockopt(sdp, SOL_SOCKET, SO_REUSEADDR, &reuse ,sizeof(reuse)) < 0)
    {
        ERR_MSG("setsockopt");
        return -1;
    }
    printf("允许端口快速重用\n");
     sin.sin_family=AF_INET;
 
   //将IP号和端口号绑定在套接字文件描述符
   struct sockaddr_in sin;
   sin.sin_family=AF_INET;
   sin.sin_port=htons(PORT);
   sin.sin_addr.s_addr=inet_addr(IP);
   socklen_t addrlen=sizeof(sin);
     if(bind(sdp,(struct sockaddr *)&sin,addrlen)<0)
     {
         ERR_MSG("bind");
         return -1;
     }
        printf("绑定成功\n");
     //将套接字设置为监听状态
         if(listen(sdp,128)<0)
        {
            ERR_MSG("listen");
        }
        printf("监听成功\n");
   struct sockaddr_in bin;        
   socklen_t addrlen1=sizeof(bin);
        //生成新的文件描述符,存储链接成功的客户信息
        int newsdp;
         newsdp=accept(sdp,(struct sockaddr *)&bin,&addrlen1);
         if(newsdp<0)
         {
             ERR_MSG("accept");
             return -1;
         }
         while(1)
         {
         //接受数据
         char buf[128];
         bzero(buf,sizeof(buf));
         ssize_t rcv;
         rcv=recv(newsdp,buf,sizeof(buf),0);
         if(rcv<0)
         {
             ERR_MSG("recv");
             return -1;
         }
         if(rcv==0)
         {
             printf("对方客户端关闭\n");
             break;
         }
        printf("对方客户端ip=[%s] port=%d newsdp=%d读取到的数据为%s\n",inet_ntoa(bin.sin_addr),ntohs(bin.sin_port),newsdp,buf);
        //发送数据
        strcat(buf,"*-*");
        if(send(newsdp,buf,sizeof(buf),0)<0)
        {
            ERR_MSG("send");
            return -1;
        }
        printf("发送成功\n");
         }
         close(sdp);
         close(newsdp);
    return 0;
}
 

2.TCP客户端搭建

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <string.h>
#define ERR_MSG(Msg) do{\
    fprintf(stderr,"__%d__:",__LINE__);\
    perror(Msg);\
}while(0)
#define SER_IP "192.168.43.3"
#define SER_PORT 8888
int main(int argc, const char *argv[])
{
 
  //创建套接字    
     int cdp=socket(AF_INET,SOCK_STREAM,0);
         if(cdp<0)
         {
             ERR_MSG("cdp");
             return -1;
         }
         /*
    //允许端口被重复使用
    int reuse = 1;
    if(setsockopt(sdp, SOL_SOCKET, SO_REUSEADDR, &reuse ,sizeof(reuse)) < 0)
    {
        ERR_MSG("setsockopt");
        return -1;
    }
    printf("允许端口快速重用\n");
   struct sockaddr_in sin;
   sin.sin_family=AF_INET;
   sin.sin_port=htons(PORT);
   sin.sin_addr.s_addr=inet_addr(IP);
   socklen_t addrlen=sizeof(sin);
     if(bind(sdp,(struct sockaddr *)&sin,addrlen)<0)
     {
         ERR_MSG("bind");
         return -1;
     }
        printf("绑定成功\n");*/
         //链接服务器
    //服务器的地址信息
   struct sockaddr_in sin;
   sin.sin_family=AF_INET;
   sin.sin_port=htons(SER_PORT);
   sin.sin_addr.s_addr=inet_addr(SER_IP);
   socklen_t addrlen=sizeof(sin);
         if(connect(cdp,(struct sockaddr *)&sin,addrlen)<0)
         {
             ERR_MSG("connect");
         }
         while(1)
         {
         char buf[128];
         bzero(buf,sizeof(buf));
        //发送数据
        printf("请输入数据");
        fgets(buf,sizeof(buf),stdin);
        buf[strlen(buf)-1]=0;
        if(send(cdp,buf,sizeof(buf),0)<0)
        {
            ERR_MSG("send");
            return -1;
        }
        printf("发送成功\n");
    /*    pthread_t tid;
        pthread_create(&tid,NULL,callback,NULL);*/
         //接受数据
         ssize_t rcv;
         rcv=recv(cdp,buf,sizeof(buf),0);
         if(rcv<0)
         {
             ERR_MSG("recv");
             return -1;
         }
         if(rcv==0)
         {
             printf("服务器关闭\n");
             break;
         }
        printf("读取到的数据为%s\n",buf);
        }
         close(cdp);
    return 0;
}
 

二.UDP

1.UDP服务器搭建

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <strings.h>
#include <string.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <unistd.h>
#define MSG_ERR(msg) do{\
    printf("%d\n",__LINE__);\
    perror(msg);}\
    while(0)
#define PORT 6666
#define IP  "192.168.43.3" 
int main(int argc, const char *argv[])
{
    //创建套接字文件
    int sfd=socket(AF_INET,SOCK_DGRAM,0);
        if(sfd<0)
        {
          MSG_ERR("socket");
          return -1;
        }
    //绑定端口号
     struct sockaddr_in sin;
     sin.sin_family=AF_INET;
     sin.sin_port=htons(PORT);
     sin.sin_addr.s_addr=inet_addr(IP);
     socklen_t addrlen=sizeof(sin);
      if(bind(sfd,(struct sockaddr *)&sin,addrlen)<0)
      {
          MSG_ERR("bind");
      }
      printf("绑定成功\n");
      while(1)
      {
      //接收数据
      struct sockaddr_in cin;
      socklen_t addrlen_cin=sizeof(cin);
      char buf[128];
      bzero(buf,sizeof(buf));
      ssize_t rcv;
      rcv=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr *)&cin,&addrlen_cin);
      if(rcv<0)
      {
          MSG_ERR("recv");
          return -1;
      }
      if(rcv==0)
      {
          printf("对方客户端关闭\n");
          break;
      }
      printf("客户端ip=%s,port=%d,接受的数据为%s\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),buf);
      //发送数据
       strcat(buf,"..");
       if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&cin,addrlen_cin)<0)
       {
           MSG_ERR("sendto");
       }
       printf("发送成功\n");
      }
      close(sfd);
      
    return 0;
}
 

2.UDP客户端搭建

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <strings.h>
#include <string.h>
#include <netinet/in.h>
#include <netinet/ip.h>
#include <unistd.h>
#define MSG_ERR(msg) do{\
    printf("%d\n",__LINE__);\
    perror(msg);}\
    while(0)
#define PORT 6666
#define IP  "192.168.43.3" 
int main(int argc, const char *argv[])
{
    //创建数据报式套接字文件
    int sfd=socket(AF_INET,SOCK_DGRAM,0);
        if(sfd<0)
        {
          MSG_ERR("socket");
          return -1;
        }
    //发送到的服务器基本地址信息
     struct sockaddr_in sin;
     sin.sin_family=AF_INET;
     sin.sin_port=htons(PORT);
     sin.sin_addr.s_addr=inet_addr(IP);
     socklen_t addrlen=sizeof(sin);
      while(1)
      {
      //发送数据
      char buf[128];
      bzero(buf,sizeof(buf));
      printf("请输入向服务器发送的数据");
      fgets(buf,sizeof(buf),stdin);
      buf[strlen(buf)-1]=0;
       if(sendto(sfd,buf,sizeof(buf),0,(struct sockaddr*)&sin,addrlen)<0)
       {
           MSG_ERR("sendto");
       }
       printf("发送成功\n");
      //接收数据
      struct sockaddr_in bin;
      socklen_t addrlen_bin=sizeof(bin);
      ssize_t rcv;
      bzero(buf,sizeof(buf));
      rcv=recvfrom(sfd,buf,sizeof(buf),0,(struct sockaddr *)&bin,&addrlen_bin);
      if(rcv<0)
      {
          MSG_ERR("recv");
          return -1;
      }
      if(rcv==0)
      {
          printf("对方服务器关闭\n");
          break;
      }
      printf("接受的数据为%s\n",buf);
      }
      close(sfd);
      
    return 0;
}
 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44623669/article/details/127992683

服务器主动推送消息数据给客户端_answer3lin的博客-爱代码爱编程_服务器和客户端之间传输数据

1 引言 这个问题第一次是我在实现一个导师的方案的时候所发现的,一开始我需要实现服务器与客户端的密钥协商和数据传递,服务器需要主动分发(推送)密钥给客户端,因为以前没有做过相关编码,后来只能想到用反向连接,也就是交换C/S的身份。 再后来是在做一个机器学习的问题时候,因为机器学习模型的运行需要综合多个客户端(边缘节点)的数据,然后得到结果,而且各个客户

NodeJs网络编程之搭建TCP,UDP连接-爱代码爱编程

node平台具有事件驱动,单线程,异步IO非阻塞等特性,有非常好的可伸缩性,适合在分布式网络里扮演各种各样的角色。 实现TCP连接 TCP服务在网络应用中十分常见,大多数的应用是基于TCP搭建的。TCP全名传输控制协议,在7层模型里属于传输层协议。同时TCP服务是面向连接的服务,需要进行三次握手形成对话。 创建TCP的服务器端 var net =

nodejs 常用方法-爱代码爱编程

process.argv process 对象是一个全局变量,它提供有关当前 Node.js 进程的信息并对其进行控制。 作为一个全局变量,它始终可供 Node.js 应用程序使用,无需使用 require()。 它也可以使用 require() 显式地访问: const process = require('process'); process.

python写tcp传输程序_Python 实现 tcp 网络程序,发送、接收数据-爱代码爱编程

TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。 TCP通信需要经过创建连接、数据传送、终止连接三个步骤。 TCP通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中打电话。

获取并显示服务器数据,客户端获取服务器数据解析-爱代码爱编程

客户端获取服务器数据解析 内容精选 换一换 VR云渲游平台提供了设备的实时监控功能,您可以通过监控大屏,查看指定设备在云上运行时的实时监控数据。当设备处于“运行中”状态时,才可以查看设备的实时监控数据。当设备与云服务器正确连接时,可在设备列表中选取指定设备单击监控进入实时监控页面。登录控制台,在服务列表中选择“计算 > VR云渲游平台”。

客户端和服务器之间的信息结构,客户端与服务器之间的通信过程-爱代码爱编程

客户端与服务器之间的通信过程 内容精选 换一换 一、HTTP概念超文本传输协议(HTTP,HyperTextTransferProtocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法HTTP协议和TCP/IP协议族的其他众多协议相同,用户客户端和服

TCPIP协议群/TCP协议/UDP协议-爱代码爱编程

文章目录 TCP/IP协议群要解决的5个问题TCP/IP协议群的5层模型TCP协议UDP协议介绍UDP和TCP的区别 上文中讲到OSI七层模型设计较为臃肿,后来罗伯特.卡恩和文顿.顿瑟夫提出的TCP协议,TCP提出的时候还没有IP协议,TCP协议中就包含了IP协议,后来为了解耦将两层分开,TCP全名Transmission Control Pro

linux远程开发——网络通信(客户端与服务器建立连接)-爱代码爱编程

目录 一、前言 二、网络编程三要素 1、IP地址 1)IP地址概念 2)通过IP地址访问CSDN官网 3)本地回环IP地址 127.0.0.1 2、端口号 3、通信协议 1)通信协议概念 2)TCP和UDP 三、网络通信基础编程 1、编程流程 2、建立本地服务器 1)socket()初始化网络 2)bind()函数 3)li

【linux系统编程】tcp通信&基于tcp实现多进程/线程并发服务器_beyon.sir的博客-爱代码爱编程

1. TCP通信流程 TCP vs. UDP TCP 和 UDP -> 传输层的协议 UDP:用户数据报协议,面向无连接,可以单播,多播,广播,面向数据报,不可靠;效率高TCP:传输控制协议,面向连接的,仅支持单

标准网络通信---tcp服务器的搭建_ccccspring的博客-爱代码爱编程

网络编程 1、相关关键字和历史(1)套接字(2)相关历史:(3)网络程序设计框架:C/S、B/S(4)网络协议分层模型: 2、网络接口编程1、套接字分类(1)流式套接字(2)数据报套接字(3)原始套接字

esp8266开发(五)——如何在电脑上搭建简易udp服务器_言無kahb的博客-爱代码爱编程

目录 前言 一、UDP服务器 二、TCP与UDP的区别 (1)TCP(Transport Control Protocol) A、TCP连接过程 B、TCP断开链接 C、TCP协议的特点 (2)UDP(User Data Protocol) A、面向无连接 B、有单播,多播,广播的功能 C、UDP是面向报文的 D、不可靠性 E、头

网络编程(osi模型、tcp/ip模型、udp及tcp通信、并发服务器、i/o多路复用与线程池、组播及广播)笔记-爱代码爱编程

目录 前言 一、网络体系结构 1.1OSI 七层模型 1.2TCP/IP 四层模型 1.3IP地址(点分制、整型) 1.4字节序转序、端口号 二、UDP通信 2.1UDP简介 2.2接收端 2.3发送端 三、TCP通信 3.1TCP简介 3.2客户端 3.3服务器 3.4 综合试炼 四、循环服务器模型 4.1并发服务模型(

linux&c语言简单使用io多路复用(select)实现tcp并发服务器-爱代码爱编程

目录 IO多路复用实现TCP并发服务器-select前言原理代码实现服务器—01server.c客户端---02client.c 执行结果 6.非原创 IO多路复用实现TCP并发服务器-

【linux网络编程】网络基础 和 socket套接字 服务器与客户端 详细案例说明_套接字socket实例的要素不包括-爱代码爱编程

目录 前言 一、网络编程三要素 1.IP地址 2.通信协议 3.端口号 二、SOCKET套接字 SOCKET概述 SOCKET分类 三、代码实现 1.编程思路 2.建立服务器 服务器完整代码 3.建立客户端 客户端完整代码   4.代码测试 前言 本文主要学习Linux内核编程,结合Visual Studio 2019

搭建客户端和服务器,完成客户端和服务器的数据收发_搭建客户端ip-爱代码爱编程

搭建客户端和服务器,完成客户端和服务器的数据收发 TCP/IP四层协议模型和TCP通信 socket编程预备知识 服务器的搭建 客户端的搭建 TCP/IP四层协议模型和TCP通信