linux与window间soket通信

来源:互联网 发布:软件简介怎么写 编辑:程序博客网 时间:2024/05/16 06:37

最近在做一个项目要求实现window与Linux间的soket通信,不是Linux做服务器而是Windows做服务器,原因是需要Linux通过soket发数据给Windows控制Windows上的程序。所以需要Linux做客户端。

Windows server

#include "stdafx.h"#include <stdio.h>#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")int main(int argc, char* argv[]){    //初始化WSA    WORD sockVersion = MAKEWORD(2,2);    WSADATA wsaData;    if(WSAStartup(sockVersion, &wsaData)!=0)    {        return 0;    }    //创建套接字    SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);    if(slisten == INVALID_SOCKET)    {        printf("socket error !");        return 0;    }    //绑定IP和端口    sockaddr_in sin;    sin.sin_family = AF_INET;    sin.sin_port = htons(8888);    sin.sin_addr.S_un.S_addr = INADDR_ANY;     if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)    {        printf("bind error !");    }    //开始监听    if(listen(slisten, 5) == SOCKET_ERROR)    {        printf("listen error !");        return 0;    }    //循环接收数据    SOCKET sClient;    sockaddr_in remoteAddr;    int nAddrlen = sizeof(remoteAddr);    char revData[1024];  printf("等待连接...\n");        sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);        if(sClient == INVALID_SOCKET)        {            printf("accept error !");                    }        printf("接受到一个连接:%s \r\n", inet_ntoa(remoteAddr.sin_addr));    while (true)    {               //接收数据        int ret = recv(sClient, revData, 1024, 0);                if(ret > 0)        {            revData[ret] = 0x00;            printf(revData);        }else{printf("side have close");exit(0);}        //发送数据        //char * sendData = "hi guest user\n";char *comm="starttest\n";if(strcmp(comm,revData)==0){printf("im start power test");}        send(sClient, revData, strlen(revData), 0);       // closesocket(sClient);    }        closesocket(slisten);    WSACleanup();    return 0;}

Linux clc

#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>#include <stdlib.h>#include <fcntl.h>#include <sys/shm.h>#define MYPORT  8888#define BUFFER_SIZE 1024int main(){    ///定义sockfd    int sock_cli = socket(AF_INET,SOCK_STREAM, 0);if(sock_cli==-1)printf("fun soket");    ///定义sockaddr_in    struct sockaddr_in servaddr;    memset(&servaddr, 0, sizeof(servaddr));    servaddr.sin_family = AF_INET;    servaddr.sin_port = htons(MYPORT);  ///服务器端口    servaddr.sin_addr.s_addr = inet_addr("192.168.227.1");  ///服务器ip    ///连接服务器,成功返回0,错误返回-1    if (connect(sock_cli, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0)    {        perror("connect");        exit(1);    }    char sendbuf[BUFFER_SIZE];    char recvbuf[BUFFER_SIZE];    while (fgets(sendbuf, sizeof(sendbuf), stdin) != NULL)    {        send(sock_cli, sendbuf, strlen(sendbuf),0); ///发送        if(strcmp(sendbuf,"exit\n")==0)            break;        recv(sock_cli, recvbuf, sizeof(recvbuf),0); ///接收        fputs(recvbuf, stdout);        memset(sendbuf, 0, sizeof(sendbuf));        memset(recvbuf, 0, sizeof(recvbuf));    }    close(sock_cli);    return 0;}
以上代码都是通过网友提供我自己加以整改后的代码。


原创粉丝点击