昨天弄了sublime之后没有弄输入中文的了,学生党来着,刚好可以练练英语(英语渣渣,还要考六级),所以注释都写英文的(语法什么的就别太深究了)

服务器端:

  1. /*start from the very beginning,and create greatness
  2. @name:Chuangwei Lin
  3. @E-mail:979951191@qq.com
  4. @brief:a simple example about server/client link(server c file)
  5. */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <strings.h>
  9. #include <sys/types.h>
  10. #include <sys/socket.h>
  11. #include <unistd.h>
  12. #include <linux/in.h>
  13. #define PORT 8888 //port to listen
  14. #define BACKLOG 2 //the length of listen queue
  15. void process_conn_server(int s);
  16. int main(int argc, char const *argv[])
  17. {
  18. int ss,sc; //ss:server's socket file descriptor;sc:client's socket file descriptor
  19. struct sockaddr_in server_addr; //server's address struct
  20. struct sockaddr_in client_addr; //use to save client's address
  21. int err; //the return value
  22. pid_t pid; //the process ID
  23. //create a socket
  24. ss = socket(AF_INET,SOCK_STREAM,0);
  25. if (ss < 0) //error
  26. {
  27. printf("socket error\n");
  28. return -1;
  29. }
  30. //set the server address
  31. bzero(&server_addr,sizeof(server_addr)); //clear
  32. server_addr.sin_family = AF_INET; //protocol family
  33. server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//local address
  34. server_addr.sin_port = htons(PORT); //server port
  35. //binging
  36. err = bind(ss,(struct sockaddr*)&server_addr,sizeof(server_addr));
  37. if (err < 0)
  38. {
  39. printf("bind error\n");
  40. return -1;
  41. }
  42. //listening
  43. err = listen(ss,BACKLOG);
  44. if (err < 0)
  45. {
  46. printf("listen error\n");
  47. return -1;
  48. }
  49. //the main loop
  50. for (;;)
  51. {
  52. int addrlen = sizeof (struct sockaddr);
  53. sc = accept(ss,(struct sockaddr*)&client_addr,&addrlen); //accept the client's connecting
  54. if (sc < 0)
  55. {
  56. continue; //if error,finish this time loop
  57. }
  58. //create a new process to process the connecting
  59. pid = fork();
  60. if (0 == pid)
  61. {
  62. close(ss); //close listen in the child process
  63. process_conn_server(sc); // process
  64. }
  65. else
  66. {
  67. close(sc); //close accept in the parent process
  68. }
  69. }
  70. return 0;
  71. }
  72. //the process function
  73. void process_conn_server(int s)
  74. {
  75. ssize_t size = 0 ;
  76. char buffer[1024]; //data buffer
  77. for(;;)
  78. {
  79. size = read(s,buffer,1024); //read data from socket and put in buffer
  80. if (0 ==size) //if no data
  81. {
  82. return; //return
  83. }
  84. sprintf(buffer,"%d bytes altogether\n",size); //send the number of data return
  85. write(s,buffer,strlen(buffer)+1);
  86. }
  87. }

客户端:

  1. /*start from the very beginning,and create greatness
  2. @name:Chuangwei Lin
  3. @E-mail:979951191@qq.com
  4. @brief:a simple example about server/client link(client c file)
  5. */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <strings.h>
  9. #include <sys/types.h>
  10. #include <sys/socket.h>
  11. #include <unistd.h>
  12. #include <linux/in.h>
  13. #define PORT 8888 //port to listen
  14. void process_conn_client(int s);
  15. int main(int argc, char const *argv[])
  16. {
  17. int s; //s:socket descriptor
  18. struct sockaddr_in server_addr; // server address
  19. int err;
  20. //create a socket
  21. s = socket(AF_INET,SOCK_STREAM,0);
  22. if (s < 0)
  23. {
  24. printf("socket error\n");
  25. return -1;
  26. }
  27. //set the server address
  28. bzero(&server_addr,sizeof(server_addr));
  29. server_addr.sin_family = AF_INET; //protocol family
  30. server_addr.sin_addr.s_addr = htonl(INADDR_ANY); //local address
  31. server_addr.sin_port = htons(PORT); //server port
  32. //change the user input char IP to int
  33. inet_pton(AF_INET,argv[1],&server_addr.sin_addr);
  34. //conneting the server
  35. connect(s,(struct sockaddr*)&server_addr,sizeof(struct sockaddr));
  36. process_conn_client(s);
  37. close(s);
  38. return 0;
  39. }
  40. void process_conn_client(int s)
  41. {
  42. ssize_t size = 0 ;
  43. char buffer[1024]; //data buffer
  44. for(;;)
  45. {
  46. //get data from standard input
  47. size = read (0,buffer,1024);
  48. if(size > 0)
  49. {
  50. write(s,buffer,size); //send to server
  51. size = read(s,buffer,1024); //read from server
  52. write(1,buffer,size); //write to standard output
  53. }
  54. }
  55. }

很简单的一段,只是建立连接然后客户端发送字符然后服务器统计后返回

linux 服务器/客户端 tcp通信的简单例子的更多相关文章

  1. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  2. java 使用 comet4j 主动向客户端推送信息 简单例子

    [背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我 ...

  3. java 网络编程之TCP通信和简单的文件上传功能

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  4. 客户端(Winform窗体)上传文件到服务器(web窗体)简单例子

    客户端:先创建一个winform窗体的应用程序项目 项目结构

  5. 170410、java Socket通信的简单例子(TCP)

    服务端代码: package com.bobohe.socket; import java.io.*; import java.net.*; import java.applet.Applet; pu ...

  6. JAVA基础知识之网络编程——-基于TCP通信的简单聊天室

    下面将基于TCP协议用JAVA写一个非常简单的聊天室程序, 聊天室具有以下功能, 在服务器端,可以接受客户端注册(用户名),可以显示注册成功的账户 在客户端,可以注册一个账号,并用这个账号发送信息 发 ...

  7. 详解Linux服务器最大tcp连接数

    网络编程在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接.那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接在确定最大连接数之 ...

  8. [linux] C语言Linux系统编程-TCP通信的11种状态

    三次握手由client主动发出SYN请求, 此时client处于SYN_SENT状态(第一次握手)当server收到之后会由LISTEN转变为SYN_REVD状态, 并回复client, client ...

  9. 16 Socket通信(简单例子)

      服务端代码: import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Da ...

随机推荐

  1. javascript 入门 之 bootstrap 第一个程序

    <table data-toggle="table"> <thead> <tr> <th>Item ID</th> &l ...

  2. Redis学习一:Redis两种持久化机制

    申明 本文章首发自本人公众号:壹枝花算不算浪漫,如若转载请标明来源! 感兴趣的小伙伴可关注个人公众号:壹枝花算不算浪漫 22.jpg 前言 Redis是基于内存来实现的NO SQL数据库,但是我么你都 ...

  3. 2019-07-31【机器学习】无监督学习之聚类 K-Means算法实例 (图像分割)

    样本: 代码: import numpy as np import PIL.Image as image from sklearn.cluster import KMeans def loadData ...

  4. 怎么自定义DataGridViewColumn(日期列,C#)

    参考:https://msdn.microsoft.com/en-us/library/7tas5c80.aspx 未解决的问题:如果日期要设置为null,怎么办? DataGridView控件提供了 ...

  5. Linux-设备

    一.在Linux系统中,每个设备都被当成一个文件来对待. 在Linux系统中,几乎所有的硬件设备都在/dev这个目录内.

  6. A Bug's Life POJ 2492

    D - A Bug's Life 二分图 并查集 BackgroundProfessor Hopper is researching the sexual behavior of a rare spe ...

  7. WPF中在Gmap.net中将Marker动起来

    前一段时间说过一篇绘制极坐标的,这段时间对它进行了改造已经今非昔比了,功能实现了很多,我目的是让Marker动起来,然后还会绘制Route,上篇也就是简单的绘制了Route,没有关于Marker的相关 ...

  8. GitHub 热点速览 Vol.17:在?各家视频会员要不要?

    作者:HelloGitHub-小鱼干 摘要:经济实用,用作上周的 GitHub 热点的横批再合适不过.先不说 GitHub Trending 上不止一个的会员共享项目,免你找好友刷脸要会员,这项目实在 ...

  9. python之实现图像的手绘效果

    https://blog.csdn.net/riba2534/article/details/74152285 原图: b: c: d: 最终图:

  10. Scrapy爬虫框架(1)--安装配置与常用命令

    安装与配置 Scrapy有几个安装依赖,一般来说可以直接pip install scrapy,这个过程会自动下载安装其他几个依赖. 上述安装方法不成功,则需要手动安装依赖包 步骤 安装 lxmlpip ...