一、linux下TCP网络编程基础,需要了解相关函数

Socket():用于套接字初始化。

Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求。

Listen():使socket处于被动的监听模式,并为该  socket  建立一个输入数据队列,将到达的服务器, 请求保存在此队列中,直到程序处理他们。

Accept():让服务器接收客户的连接请求。

Connect():客户端使用connect函数来配置 socket并与远端服务器建立一个 TCP 连接。

Close():关闭socket

Send():发送函数

Recv():接受函数

二、服务器和客户端流程图如下图所示

三、linux下TCP编程实例

TCP服务器程序

  1. /* server.c */
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <sys/ioctl.h>
  5. #include <netinet/in.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <string.h>
  9. #include <unistd.h>
  10. #define PORT 2000 //定义端口号
  11. #define BUFFER_SIZE 1024
  12. #define MAX_QUE_CONN_NM 5 //最大缓冲队列
  13. int main(void)
  14. {
  15.  
  16. /*下面该以太网套接字地址结构体非常重要*/
  17. struct sockaddr_in server_addr,client_addr;
  18. int sin_size,recvbytes,wbytes;
  19. int ser_fd,cli_fd;
  20. char buf[BUFFER_SIZE];
  21. /* 建立 socket 连接,IPv4 协议,字节流套接字 */
  22. if((ser_fd = socket(AF_INET,SOCK_STREAM,))== -)
  23. {
  24. perror("socket");
  25. exit();
  26. }
  27. printf("Socket id = %d\n",ser_fd);
  28. /* 初始化 sockaddr_in 结构体 */
  29. server_addr.sin_family = AF_INET;
  30. server_addr.sin_port = htons(PORT);
  31. server_addr.sin_addr.s_addr = INADDR_ANY;
  32. bzero(&(server_addr.sin_zero),);
  33. /* 绑定函数 bind */
  34. if(bind(ser_fd,(struct sockaddr *)&server_addr,sizeof(struct
  35. sockaddr))==-)
  36. {
  37. perror("bind");
  38. exit();
  39. }
  40. printf("Bind success!\n");
  41.  
  42. /* 调用 listen 函数,进行监听 */
  43. if(listen(ser_fd,MAX_QUE_CONN_NM)== - )
  44. {
  45. perror("listen");
  46. exit();
  47. }
  48. printf("Listening......\n");
  49.  
  50. /* 调用 accept 函数,等待客户端的连接 */
  51. if((cli_fd = accept(ser_fd,(struct sockaddr *)&client_addr,&sin_size))==-)
  52. {
  53. perror("accept");
  54. exit();
  55. }
  56. printf("Have client ready for connecting\n");
  57.  
  58. /* 调用 recv 函数接收客户端的请求 */
  59. memset(buf,,sizeof(buf));
  60. if((recvbytes = recv(cli_fd,buf,BUFFER_SIZE,))== -)
  61. {
  62. perror("recv");
  63. exit();
  64. }
  65. /* 将收到的信息(客服端发来的信息)打印出来 */
  66. printf("Received a message:%s\n",buf);
  67. /*对客户端发过来的数据进行处理,只是将首字符加2,再发给客户端*/
  68. buf[]=buf[]+;
  69. if( ( wbytes = write(cli_fd,buf,strlen(buf)) ) == - )
  70. {
  71. perror("handle send");
  72. exit();
  73. }
  74. else
  75. printf("handle buf is %s\n",buf);
  76. /* 关闭 socket */
  77. close(ser_fd);
  78. return ;
  79. }

TCP客端程序

  1. /*client*/
  2. #include<sys/types.h>
  3. #include<sys/socket.h>
  4. #include<sys/ioctl.h>
  5. #include<netinet/in.h>
  6. #include<netdb.h>
  7. #include<stdio.h>
  8. #include<stdlib.h>
  9. #include<string.h>
  10. #include<unistd.h>
  11. #define PORT 2000 //端口号
  12. #define BUFFER_SIZE 1024
  13. int main(int argc,char *argv[])
  14. {
  15. struct sockaddr_in server_addr;
  16. int sockfd,sendbytes,rbytes;
  17. //int ser_fd;
  18. char buf[BUFFER_SIZE];
  19. struct hostent *host;
  20. /*指定输入参数为3个,否则出错*/
  21. if(argc!=)
  22. {
  23. perror("Usage:./clinet IP address Text\n");
  24. exit();
  25. }
  26. /*地址解析函数*/
  27. if( ( host = gethostbyname(argv[]) ) == NULL ) //得到主机名及相应信息
  28. {
  29. perror("gethostbyname");
  30. exit();
  31. }
  32. memset(buf,,sizeof(buf));
  33. sprintf(buf,"%s",argv[]);
  34. buf[strlen(buf)+]='\0';
  35. /*建立socket连接,IPv4协议,字节流套接字*/
  36.  
  37. if( ( sockfd = socket(AF_INET,SOCK_STREAM,) ) == - )
  38. {
  39. perror("socket");
  40. exit();
  41. }
  42. printf("Socket id = %d\n",sockfd);
  43.  
  44. /*初始化sockaddr_in 结构体*/
  45. server_addr.sin_family = AF_INET; //TCP/IP协议簇
  46. server_addr.sin_port = htons(PORT); // sin_port存储端口号(使用网络字节顺序) htons将unsigned short从主机字节序转化为网络字节序
  47. server_addr.sin_addr = *((struct in_addr *)host->h_addr); //前面指过的,host主机名及相应信息的指针,这里为IP地址
  48. bzero(&(server_addr.sin_zero),); //等同于memset,清空作用
  49. /*调用connect函数主动发起对服务器的连接*/
  50. if( ( connect(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr)) ) == - ) //第2个参数,指向要连接套接字的sockaddr结构体的指针
  51. {
  52. perror("connect");
  53. exit();
  54. }
  55. printf("connect server success!\n");
  56. /*发送消息给服务器端*/
  57. if( ( sendbytes = send(sockfd,buf,strlen(buf),) ) == - )
  58. {
  59. perror("send");
  60. exit();
  61. }
  62. else printf("buf is %s\n",buf);
  63. /* 将服务器处理后的数据读取出来 */
  64. if ((rbytes=read(sockfd,buf,))==-)
  65. {
  66. printf("read handle error\n");
  67. exit();
  68. }
  69. else
  70. printf("read handle buf is %s \n",buf);
  71. close(sockfd);
  72. return ;
  73. }

四、程序运行结果如下:

        客户端结果

        服务器结果

五、C#socket()编程

参考资料:http://lanxicy.com/read/9740d8d480de02ad528ada5d.html

对该资料进行了些修改生成exe文件

运行结果如下

              C#TCP客户端

               C#TCP服务器

六、由于linux下和C#下都使用了TCP网络编程,所以用linux当作客户端,C#当作服务器,设置好端口号和IP地址,

他们之间是可以通信的,然后在C#下可以把相关的数据写入数据库里面,相关网页再从数据库里面读取相关数据就行了。

运行结果如下

      Linux客户端

            C#服务器

七、总结心得

linux下的网络编程和Windows下C#网络编程都是使用TCP协议进行通信,所以即使是跨平台,他们之间还是能进行通信的。

Linux下TCP网络编程与基于Windows下C#socket编程间通信的更多相关文章

  1. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  2. 基于Linux的TCP网络聊天室

    1.实验项目名称:基于Linux的TCP网络聊天室 2.实验目的:通过TCP完成多用户群聊和私聊功能. 3.实验过程: 通过socket建立用户连接并传送用户输入的信息,分别来写客户端和服务器端,利用 ...

  3. 团队软件开发_基于windows下截屏软件关于NABC框架的特点

    经过我们小组数次的激烈讨论,就自己的能力和时间而言,我们小组的初步的计划是开发一款基于windows下的截图软件. 关于这个软件的功能,我们初步的想法如下: 1.能在windows下后台运行,有相应的 ...

  4. 基于Windows下处理Java错误:编码GBK的不可映射字符的解决方案

    基于Windows下处理Java错误:编码GBK的不可映射字符的解决方案 最近在研究Java,涉及命令行编译,使用notepad++编辑器,然后使用javac编译: 之前的几个文件没有中文的内容,都没 ...

  5. 基于Windows下浏览器无法正常打开的解决方案

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  6. 基于Windows下永久破解jetbrains公司的系列产品(Idea, pycharm,clion,phpstorm)

    基于Windows下永久破解jetbrains公司的系列产品(Idea, pycharm,clion,phpstorm): PS : 有能力的建议购买正版,好吧. PS:均针对其对应的2018.3.1 ...

  7. 基于C++简单Windows API的socket编程(阻塞模式)

    1. 概述:简单的基于Windows API的socket点对点聊天程序,为了方便初学者,本文代码均采用阻塞原理编写. 2. 代码样例 Server.cpp(服务端) #include <cst ...

  8. 基于java的简单Socket编程

    1TCP协议与UDP协议     1.1 TCP               TCP是(Tranfer Control Protocol)的简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输 ...

  9. linux下启动mysql服务(类似于windows下net start mysql)

    1.linux系统启动方式:service mysql start.其类似于windows下net start mysql

随机推荐

  1. Linux 常用命令 :ls命令

    ls命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单. 通过ls 命令不仅可以查看linu ...

  2. oracle 身份证校验函数

    1.正则表达式写法: CREATE OR REPLACE FUNCTION Func_checkidcard (p_idcard IN VARCHAR2) RETURN INT IS v_regstr ...

  3. centos6.4安装Apache+MySQL+PHP

    一.安装 MySQL 首先来进行 MySQL 的安装.打开超级终端,输入: [root@localhost ~]# yum install mysql mysql-server 安装完毕,让 MySQ ...

  4. JS---如何避免用户在请求时“猛击”

    var isAjax=false;//是否正在执行ajax请求,此处表示不在拿数据 var getInfoByTrainCode=function () { if(isAjax) return;//如 ...

  5. C#对于文件操作

    //C#追加文件 StreamWriter sw = File.AppendText(Server.MapPath(".")+"\\myText.txt"); ...

  6. jquery from提交和post提交

    //from 提交 function login(){    $('#login_form').form('submit',{              url: '../../../bagechux ...

  7. Linux用户和组的管理操作

    用户和组的管理操作 命令中涉及的单词和简写: 用户:user:组:group : 增加:add :  修改:modify  mod ;  删除 : delete  del 增加用户     /etc/ ...

  8. sap MD04中常用函数

    1. 需求溯源 : MD_PEGGING_NODIALOG 2. 实时库存 : MD_STOCK_REQUIREMENTS_LIST_API 这个函数中MDPSX 和 MDEZX 是通过 MDPS 的 ...

  9. Struts 2学习笔记——拦截器相关

    一.添加国际化支持 默认的struts-deault.xml文件中已经定义了国际化拦截器,内容如下 <!-定义国际化拦截器--> <interceptor name="i1 ...

  10. JavaScript中关于时间的知识点

    1.计算时间差,天数,小时数,余数 var begintime_ms = Date.parse(new Date(begintime.replace(/-/g, "/"))); / ...