Windows和Linux进行socket通信

发表于:2013-2-05 09:50

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:feixiaoxing    来源:51Testing软件测试网采编

#
Linux
分享:

  在公司里面,我们平时使用的机器一般都是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\n", GetLastError());
        return -1;
    }
 
    /* Create Socket */
    CientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if ( CientSocket == INVALID_SOCKET )
    {
        printf("Create Socket Failed::%d\n", 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\n", GetLastError());
        return -1;
    }
    else
    {
        printf("Connect succedded!\n");
    }

    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\n", GetLastError());
            break;
        }
  
  if('q' == SendBuffer[0])
  {
   break;
  }
    }
   
 /* close socket */
    closesocket(CientSocket);
    WSACleanup();
 
    return 0;
 }
 

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号