Windows和Linux进行socket通信
作者:网络转载 发布时间:[ 2013/2/5 14:40:49 ] 推荐标签:
在公司里面,我们平时使用的机器一般都是windows系统,但是开发、编译的机器往往是linux服务器。通过ping、ftp、samba、telnet、ssh,人们可以很方便与服务器连接。windows系统使用的是windows socket,而linux使用的posix socket,那么这两个socket之间是怎么通信的呢?网上关于windows与windows通信的代码很多,linux与linux通信的代码也很多,但是windows和linux通信的代码很少。这里,我想写一个简单的socket代码,实现linux和windows的通信。
其实,广义一点看,网页访问、邮箱、游戏、聊天工具都是利用socket实现的,当然后面实现的逻辑要比我们写的代码复杂的多。但是,我们完全可以利用简单的代码来说明socket通信问题,能做到这一点足够了。这也是我一直推崇的方法,用简单的代码表达实际的功能。
windows侧的client代码,
#include <stdio.h>
#include <Windows.h>
#pragma comment(lib,"ws2_32.lib")
#define PORT 4000
#define IP_ADDRESS "192.168.1.102"
int main(int argc, char* argv[])
{
WSADATA Ws;
SOCKET CientSocket;
struct sockaddr_in ClientAddr;
int Ret = 0;
char SendBuffer[MAX_PATH];
/* Init Windows Socket */
if ( WSAStartup(MAKEWORD(2,2), &Ws) != 0 )
{
printf("Init Windows Socket Failed::%d
", GetLastError());
return -1;
}
/* Create Socket */
CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if ( CientSocket == INVALID_SOCKET )
{
printf("Create Socket Failed::%d
", GetLastError());
return -1;
}
ClientAddr.sin_family = AF_INET;
ClientAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
ClientAddr.sin_port = htons(PORT);
memset(ClientAddr.sin_zero, 0x00, 8);
/* connect socket */
Ret = connect(CientSocket,(struct sockaddr*)&ClientAddr, sizeof(ClientAddr));
if ( Ret == SOCKET_ERROR )
{
printf("Connect Error::%d
", GetLastError());
return -1;
}
else
{
printf("Connect succedded!
");
}
while (1)
{
scanf("%s", SendBuffer);
/* send data to server */
Ret = send(CientSocket, SendBuffer, (int)strlen(SendBuffer), 0);
if ( Ret == SOCKET_ERROR )
{
printf("Send Info Error::%d
", GetLastError());
break;
}
if('q' == SendBuffer[0])
{
break;
}
}
/* close socket */
closesocket(CientSocket);
WSACleanup();
return 0;
}
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11