TCP UDP IP 网络编程题

      最后更新:2022-04-29 05:57:20 手机定位技术交流文章

      一. 维持一. 源代码
      前言
      TCP(传送控制议定书)
      TCP打算遵守有利于多网络应用的等级协议结构。TCP用于提供初级计算机配对流程之间的可靠通信服务,这些流程与各种互联的计算机通信网络相连。《贸易协定》的前提是,可以在较低层次达成简单协议。提供不可靠的数据报告服务是可能的。 原则上,贸易点应当能够就广泛的通信系统开展工作,从硬线到集体交换或电路交换网络。
      嵌套字
      套接字是所有交流的基础它是公路通信的基本操作模块,支持TCP/IP议定书。袜子可被视为东道方之间进程双向沟通的终点。它既是单一东道主内部的编程接口,也是整个网络的编程接口。在通讯领域,有插座。通信领域旨在处理由通用线索提供的抽象想法,通过带子进行通信。袜子往往在同一领域与脚手架分享数据(数据交换可能发生跨域边界) 通信往往与同一领域的脚手架分享数据(数据交换也可能发生跨域边界)。然而,它与某种形式的解释方法有关。此域被使用互联网协议进行相互连接的过程所使用 。

      系统调用
      socket
      原型:
      int socket(int domain, int type,int protocol)

      注: Socket 进行基本的网络连接准备。 它会返回关于成功的文件描述符, 1 关于失败的文件描述符, 以及检查是否错误理解问题的具体细节 。
      bind
      原型:
      int bind(int sockfd, struct sockaddr *my_addr, int addrlen)
      然而,由于系统兼容性, 我们通常不使用这个信头文件, 而不使用另一个结构。 存在 sockaddr_ in 的定义 。
      struct sockaddr_in{
      unsigned short          sin_family;
      unsigned short int      sin_port;
      struct in_addr          sin_addr;
      unsigned char           sin_zero[8];
      }


      我们大多使用互联网,所以..
      通常是Af_INET, 但它会是唯一的事情 发生在我身上。
      如果你愿意,你可以与主机交谈。
      Sin_port是我们监听的端口号。 Sin_zero [8] 已填满 。
      绑定本地端口连接到由 Socket 返回的文件描述。 成功以零返回, 失败则以套接字返回 。
      listen
      原型:
      int listen(int sockfd,int backlog)

      accept
      原型:
      int accept(int sockfd, struct sockaddr *addr,int *addrlen)
      connect
      原型:
      int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)
      2. 在Ubuntu执行程序。
      编译
      gcc -o server-while-tcp.out server-while-tcp.c
      gcc -o client.out client.c
      1
      2
      运行
      ./server-while-tcp.out
      我不知道你在说什么 出局192,一号 ** 新窗户打开了


      三. 将服务器转换为多线模式 。
      功能
      一. 多用途数据传输,即一个单一服务器与众多客户相对应,同时可以倾听多达10个客户的心声。

      二. 客户向服务器发送连接请求,如果成功,公布连接细节。

      三,一旦客户端向服务器提供数据,数据就打印在服务器上。

      四. 服务器在将未来所有数据转换为大写后返回客户端 。

      五,从服务器上返回的数据由客户打印。

      源源服务器( 保留)

      #include <sys/types.h>      /* 网络编程所需头文件*/
      #include <sys/socket.h>     /* 网络编程所需头文件*/
      #include <string.h>
      #include <netinet/in.h>     /* 包含类似inet_ntoa函数的头文件 */
      #include <arpa/inet.h>      /* 包含类似inet_ntoa函数的头文件 */
      #include <unistd.h>         /* 包含close函数、forck函数等系统调用函数的头文件 */
      #include <stdio.h>
      #include <signal.h>         /* 包含signal函数的头文件 */

      * 监听港口号 * /
      # define FREDLOG10/ * 听 功能, 最同时的监听连接 */

      /* socket
      * bind
      * listen
      * accept
      * send/recv
      */
      int charup(unsigned char ch[1000]);

      int main(int argc, char **argv)
      {
      int iSocketServer;
      int iSocketClient;
      Struct sockaddr_ in tSocketServerAddr; / * 存储服务器用户的结构、 端口号和其他信息 。 *
      Struct sockaddr_ in tSocketClientAddr; / * 连接客户端的信息结构, 如 IP 地址* /
      int iRet;
      int iAddrLen;

      int iRecvLen;
      unsigned char ucRecvBuf[1000];

      int iClientNum = -1;

      信号(SIGCHLD,SIG_IGN);/ * 程序硬程序;否则,封闭客户端产生的服务器内置程序资源将不会被母程序回收,从而造成资源浪费 * /

      i 套接字器 = 套接字器 (AF_ INET, SOCK_STREAM, 0) / * 初始化套接字* /
      if (-1 == iSocketServer)
      {
      printf("Socket error!n");
      return -1;
      }

      tSocketServerAddr.sin_family        = AF_INET;
      抱歉, tsocketServerAddr.sin_port = htons (SERVER_port); / * 将短型端口数据转换为适合网络传输的数据 */
      对不起,托盘服务员Addr. 我不知道你在说什么,sin_addr.s_addr = InDID_ANY;/* 任何主机通讯都允许 */
      我不确定你的意思是什么,memset (tSocketServerAddr.sin_zero,0,8;/ *内置为0, 保证与Sruct sockaddr的长度相同) /

      iRet =  bind(iSocketServer, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr));  /* 之前创建的socket文件描述符将被bind修饰 */
      if (iRet == -1)
      {
      printf("Bind error!n");
      return -1;
      }

      iRet = 听 (iSocketServer, 备份LOG); / * 听, 调用监听功能 * /
      if (-1 == iRet)
      {
      printf("listen error!n");
      return -1;
      }
      else
      {
      printf("Listening & Accepting...n");
      }

      while (1)
      {
      iAddrLen = sizeof(struct sockaddr);
      / * 使用接受功能等待客户连接;如果客户提供值,连接失败,返回 -1; * /
      iSocketClient = accept(iSocketServer, (struct sockaddr *)&tSocketClientAddr, &iAddrLen);
      if (-1 != iSocketClient)
      {
      iClientNum++;
      * 允许许多客户连接,其中每个用户需要叉叉并创建子进程*/
      printf("Get connnect from NO.%d : %sn", iClientNum, inet_ntoa(tSocketClientAddr.sin_addr));
      如果 (!) Fork () / * 一旦执行 infork (), 就会打开一个相同的子进程 /
      * 父进程叉()=0; 子进程叉()!=0;
      * 分处理源代码*/
      while (1)
      {

      * 接受并显示客户生成的数据 * /
      iRecvLen = iRecvLen = recv(iSocketClient, ucRecvBuf, 999, 0);

      if (iRecvLen <= 0)
      {
      关闭(iSocketCliet); / * 不断接收客户端信息* /
      return -1;
      }
      else
      {
      * + 终点 * / ucRecvBuf [iRecvLen] = '0';
      printf("Get Msg From client %d : %sn", iClientNum, ucRecvBuf);
      }
      字符集(ucRecvBuf); / * 字符串对字母翻译函数 */
      iRecvLen = send(iSocketClient, ucRecvBuf, strlen(ucRecvBuf), 0);
      if(iRecvLen <= 0)
      {
      close(iSocketClient);
      return -1;
      }
      }
      }
      }
      }
      close(iSocketServer);
      return 0;
      }

      / 此函数定义字符串到资本化函数。
      int charup(unsigned char ch[1000])
      {
      int i = 0;
      while (ch[i] != '')
      {
      if(ch[i]>='a'&&ch[i]<='z')
      c[i]=ch[i]-32; //如果你忘记了案件和案件之间的32个值差,请改用“a”-“A”。
      i ++;
      }
      return 0;
      }
      客户(客户)来源

      #include <sys/types.h>      /* 网络编程所需头文件*/
      #include <sys/socket.h>     /* 网络编程所需头文件*/
      #include <string.h>
      #include <netinet/in.h>     /* 包含类似inet_ntoa函数的头文件 */
      #include <arpa/inet.h>      /* 包含类似inet_ntoa函数的头文件 */
      #include <unistd.h>         /* 包含close函数、forck函数等系统调用函数的头文件 */
      #include <stdio.h>
      #include <signal.h>


      # define ERVER_Pport 88// 相同港口号

      *系统呼叫//口袋
      * connect
      * listen
      * send/recv
      */



      int main(int argc, char **argv)
      {
      int iSocketClient;
      struct sockaddr_in tSocketServerAddr;

      iRet int; // 返回值
      unsigned char ucSendBuf[1000];
      unsigned char ucRecvBuf[1000];
      int iSendLen;
      int iRecvLen;

      if (argc != 2)
      {
      printf("Usage:n");
      printf("%s <server_ip>n", argv[0]);
      return -1;
      }

      iSocketClient = socket(AF_INET, SOCK_STREAM, 0);

      tSocketServerAddr.sin_family = AF_INET;
      tSocketServerAddr.sin_port = htons(SERVER_PORT); //host to net,short
      我不懂你的意思,sin_addr.s_addr = InDID_ANY;/所有注册IP
      if(0 == inet_aton(argv[1], &tSocketServerAddr.sin_addr))
      {
      printf("invalid server_ipn");
      return -1;
      }
      memset(tSocketServerAddr.sin_zero, 0 , 8);

      iRet = connect(iSocketClient, (const struct sockaddr *)&tSocketServerAddr, sizeof(struct sockaddr));
      if (-1 == iRet)
      {
      printf("connect error!n");
      printf("%s <server_ip>n", argv[0]);
      return -1;
      }

      while (1)
      {
      if(fgets(ucSendBuf, 999, stdin))
      {
      iSendLen = send(iSocketClient, ucSendBuf, strlen(ucSendBuf), 0);
      if(iSendLen <= 0)
      {
      close(iSocketClient);
      return -1;
      }
      }
      iRecvLen = iRecvLen = recv(iSocketClient, ucRecvBuf, 999, 0);
      if (iRecvLen <= 0)
      {
      关闭 (iSocketCliet); / / 总是接收客户端消息
      return -1;
      }
      else
      {
      + 结尾点 ucRecvBuf [iRecvLen] = '0';
      printf("Feedback:%sn", ucRecvBuf);
      }
      }
      return 0;
      }
      在 Ubuntu 构建并运行程序 。
      编译
      gcc -o srv srv.c
      gcc -o cli cli.c
      运行
      ./srv
      192. 1** / 一个新的窗口已经打开。

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/23090.html

          热门文章

          文章分类