(8)Linux(客户端)和Windows(服务端)下socket通信实例

Linux(客户端)和Windows(服务端)下socket通信实例:

(1)首先是Windows做客户端,Linux做服务端的程序

Windows   Client端

  1. #include <stdio.h>
  2. #include <Windows.h>
  3. #pragma comment(lib, "ws2_32.lib")
  4. #define Port 5000
  5. #define IP_ADDRESS "192.168.1.30"     //服务器地址
  6. int main() // argc是命令行总的参数个数
  7. {
  8. WSADATA s; // 用来储存调用AfxSocketInit全局函数返回的Windows Sockets初始化信息
  9. SOCKET ClientSocket;
  10. struct sockaddr_in ClientAddr; // 一个sockaddr_in型的结构体对象
  11. int ret = 0;
  12. char SendBuffer[MAX_PATH]; // Windows的MAX_PATH默认是260
  13. // 初始化Windows Socket
  14. // WSAStartup函数对Winsock服务的初始化
  15. if (WSAStartup(MAKEWORD(2, 2), &s) != 0) // 通过连接两个给定的无符号参数,首个参数为低字节
  16. {
  17. printf("Init Windows Socket Failed! Error: %d\n", GetLastError());
  18. getchar();
  19. return -1;
  20. }
  21. while (1)
  22. {
  23. // 创建一个套接口
  24. // 如果这样一个套接口用connect()与一个指定端口连接
  25. // 则可用send()和recv()与该端口进行数据报的发送与接收
  26. // 当会话结束后,调用closesocket()
  27. ClientSocket = socket(AF_INET, // 只支持ARPA Internet地址格式
  28. SOCK_STREAM, // 新套接口的类型描述
  29. IPPROTO_TCP); // 套接口所用的协议
  30. if (ClientSocket == INVALID_SOCKET)
  31. {
  32. printf("Create Socket Failed! Error: %d\n", GetLastError());
  33. getchar();
  34. return -1;
  35. }
  36. ClientAddr.sin_family = AF_INET;
  37. ClientAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS); // 定义IP地址
  38. ClientAddr.sin_port = htons(Port); // 将主机的无符号短整形数转换成网络字节顺序
  39. memset(ClientAddr.sin_zero, 0X00, 8); // 函数通常为新申请的内存做初始化工作
  40. // 连接Socket
  41. ret = connect(ClientSocket,
  42. (struct sockaddr*)&ClientAddr,
  43. sizeof(ClientAddr));
  44. if (ret == SOCKET_ERROR)
  45. {
  46. printf("Socket Connect Failed! Error:%d\n", GetLastError());
  47. getchar();
  48. return -1;
  49. }
  50. else
  51. {
  52. printf("Socket Connect Succeed!");
  53. }
  54. printf("Input Data: ");
  55. while (1)
  56. {
  57. scanf("%s", &SendBuffer);
  58. // 发送数据至服务器
  59. ret = send(ClientSocket,
  60. SendBuffer,
  61. (int)strlen(SendBuffer), // 返回发送缓冲区数据长度
  62. 0);
  63. if (ret == SOCKET_ERROR)
  64. {
  65. printf("Send Information Failed! Error:%d\n", GetLastError());
  66. getchar();
  67. break;
  68. }
  69. break;
  70. }
  71. // 关闭socket
  72. closesocket(ClientSocket);
  73. if (SendBuffer[0] == ‘q‘) // 设定输入第一个字符为q时退出
  74. {
  75. printf("Quit!\n");
  76. break;
  77. }
  78. }
  79. WSACleanup();
  80. getchar();
  81. system("pause");
  82. return 0;
  83. }

Linux server端

  1. #include <stdio.h>
  2. #include <sys/socket.h>
  3. #include <sys/types.h> /* See NOTES */
  4. #include <sys/socket.h>
  5. #include <arpa/inet.h>
  6. #include <string.h>
  7. #include<unistd.h>
  8. #include <cstdlib>
  9. #define SERVER_PORT 5000
  10. #define LENGTH_OF_LISTEN_QUEUE 20
  11. #define BUFFER_SIZE 10
  12. int main() // (int argc, char* argv[])
  13. {
  14. struct sockaddr_in server_addr;
  15. int server_socket;
  16. int opt = 1;
  17. bzero(&server_addr, sizeof(server_addr)); // 置字节字符串前n个字节为0,包括‘\0‘
  18. server_addr.sin_family = AF_INET;
  19. server_addr.sin_addr.s_addr = htons(INADDR_ANY); // 转小端,INADDR_ANY就是指定地址为0.0.0.0的地址
  20. server_addr.sin_port = htons(SERVER_PORT);
  21. // 创建一个Socket
  22. server_socket = socket(PF_INET, SOCK_STREAM, 0);
  23. if (server_socket < 0)
  24. {
  25. printf("Create Socket Failed!\n");
  26. exit(1);
  27. }
  28. // bind a socket
  29. setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
  30. if(bind(server_socket, (struct sockaddr*)&server_addr, sizeof(server_addr)))
  31. {
  32. printf("Server Bind Port: %d Failed!\n", SERVER_PORT);
  33. exit(1);
  34. }
  35. // 监听Socket
  36. if (listen(server_socket, LENGTH_OF_LISTEN_QUEUE))
  37. {
  38. printf("Server Listen Failed!\n");
  39. exit(1);
  40. }
  41. while(1)
  42. {
  43. struct sockaddr_in client_addr;
  44. int client_socket;
  45. socklen_t length;
  46. char Buffer[BUFFER_SIZE];
  47. // 连接客户端Socket
  48. length = sizeof(client_addr);
  49. client_socket = accept(server_socket, (struct sockaddr*)&client_addr, &length);
  50. if (client_socket < 0)
  51. {
  52. printf("Server Accept Failed!\n");
  53. break;
  54. }
  55. // 从客户端接收数据
  56. while(1)
  57. {
  58. bzero(Buffer, BUFFER_SIZE);
  59. length = recv(client_socket, Buffer, BUFFER_SIZE, 0);
  60. if (length < 0)
  61. {
  62. printf("Server Recieve Data Failed!\n");
  63. break;
  64. }
  65. if (‘q‘ == Buffer[0])
  66. {
  67. printf("Quit!\n");
  68. break;
  69. }
  70. printf("%s\n", Buffer);
  71. break;
  72. }
  73. close(client_socket);
  74. }
  75. close(server_socket);
  76. return 0;
  77. }

(2)Windows做服务端,Linux做客户端实例

时间: 2024-12-23 18:54:38

(8)Linux(客户端)和Windows(服务端)下socket通信实例的相关文章

Linux下更改oracle客户端字符集和服务端字符集

from:http://blog.csdn.net/chid/article/details/6166506 Linux 下更改 oracle 客户端字符集和服务端字符集 1.Linux 下更改 oracle 客户端字符集,即设置环境变量" NLS_LANG" 的值 查看客户端字符集,在终端下执行: echo $NLS_LANG 修改客户端字符集: sudo gedit /etc/environment 在environment 文件中增加以下内容: NLS_LANG="SI

GIT Windows服务端搭建笔记

GIT Windows服务端搭建笔记 所需软件: GIT服务端: Bonobo Git Server,下载最新版 https://bonobogitserver.com/ 一:配置服务端(基于Windows10+Bonobo Git Server6.3) 打开IIS功能.控制面板->程序->启用或关闭Windows功能,勾选Internet Information Services的选项. 下载好Bonobo Git Server,是一个zip压缩包,是用ASP.NET  MVC开发的网站.

Android客户端与PHP服务端交互(一)---框架概述

背景 作为一个普通上班族,总是想做一些自认为有意义的事情,于是乎准备成立一个工作室,尽管目前正在筹备阶段,但是之前有些朋友提出一些需求的时候,我发现自己的能力还是有限,直到最近和一些技术牛朋友聊起这事儿,大家不谋而合,也准备加入小团队.只是我作为工作室的“业务员”,感觉有必要都了解一下,这样才好和客户沟通,提出解决方案,也方便大家讨论订方案.譬如之前有商家提出的在线订单,要求客户可以使用APP直接下单,商家处理订单.当时我不是很懂,自己接不了,现在和朋友交流后,准备学习一下. 框架 ① 客户提交

Android客户端与PHP服务端交互(一)

背景 作为一个普通上班族,总是想做一些自认为有意义的事情,于是乎准备成立一个工作室,尽管目前正在筹备阶段,但是之前有些朋友提出一些需求的时候,我发现自己的能力还是有限,直到最近和一些技术牛朋友聊起这事儿,大家不谋而合,也准备加入小团队.只是我作为工作室的"业务员",感觉有必要都了解一下,这样才好和客户沟通,提出解决方案,也方便大家讨论订方案.譬如之前有商家提出的在线订单,要求客户可以使用APP直接下单,商家处理订单.当时我不是很懂,自己接不了,现在和朋友交流后,准备学习一下. 框架 ①

Android客户端与PHP服务端通信(二)

概述 本节通过一个简单的demo程序简单的介绍Android客户端通过JSON向PHP服务端提交订单,PHP服务端处理订单后,通过JSON返回结果给Android客户端.正常来讲,PHP服务端在处理订单过程中,需要与MySQL数据库交互,这里为了简单起见,暂时省掉MySQL. 通信格式 首先,需要定下客户端与服务端之间通信格式,如下表 Android客户端 客户端与服务端采用JSON数据格式通信,同时采用HTTP通信协议交互,采用POST方式提交结果.同时还要注意一点,与WEB服务器通信的过程需

Socket Android手机客户端与PC服务端局域网内联测试

Socket Android手机客户端与PC服务端局域网内联测试,笔者采用的是 PC服务器,Android平板客户端 ,PC模拟器客户端, 前段时间为了加深对Socket通信的印象和知识的深度掌握,我模仿了QQ的一些元素,也借鉴了其他牛人的一些源码思想,写了 一个 叫 IQ 的 Android 聊天软件,该软件大致由 Android客户端.JAVA pc服务端.mysql数据库组成,客户端和服务端都 比较多的用到了读写的IO流,SCOKET,线程等,这篇博客主要给大家介绍测试环境,不讲源码实现方

Oracle客户端无法连接服务端解决方法及步骤

客户端无法连接服务端数据库,原因有网络,配置,文件访问权限,数据库服务是否已启动 等问题导致,一般排查的步骤如下:1.检查操作系统级别网络是否通畅 ping 192.168.10.1 2.检查数据库层网络是否通畅 tnsping myserverdb 3.检查监听状态是否正常 lsnrctl status listener 4.如果第二步不通,检查服务端监听配置是否正确 监听文件配置一般如下 # 监听名称 LISTENER= (DISCRIPTION = (ADDRESS=(PROTOCOL =

Linux下简单的socket通信实例

Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Bruce Lee       学习网络编程也一段时间了,刚开始看<UNIX网络编程>的时候,觉得这本厚厚的书好难啊!看到后来,发现并没有想象中的那么难.如果你是新手,建议你看到第二部分结束后,开始着手写代码.不写代码肯定是不行的.看100遍也没有敲一遍实现一遍来的清楚.敲完以后,带着问题去看书,你会

Windows Phone 7 下 Socket(TCP) 与 PC 通讯

Windows Phone 7 下 Socket(TCP) 与 PC 通讯,使用 WP7 模拟器与 PC 上的 Simple TCP 服务进行通讯. TCP 客户端主要实现 Socket 连接的建立.数据的发送与接收和关闭已经建立的 Socket. 1 using System; 2 using System.Net; 3 using System.Windows; 4 using System.Windows.Controls; 5 using System.Windows.Documents