Linux向Windows通信C源代码


  1. /*linux端*/  
  2. #include <stdio.h>   
  3. #include <stdlib.h>   
  4. #include <errno.h>   
  5. #include <string.h>   
  6. #include <sys/types.h>   
  7. #include <netinet/in.h>   
  8. #include <sys/socket.h>   
  9. #include <sys/wait.h>   
  10.   
  11. #define MYPORT 3333   
  12. #define BACKLOG 10   
  13.   
  14. void main()  
  15. {  
  16.     int sockfd, new_fd;  
  17.     struct sockaddr_in my_addr;  
  18.     struct sockaddr_in their_addr;  
  19.     int sin_size;  
  20.     if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {  
  21.         perror("socket");  
  22.         exit(1);  
  23.     }  
  24.     my_addr.sin_family = AF_INET;  
  25.     my_addr.sin_port = htons(MYPORT);  
  26.     my_addr.sin_addr.s_addr = htonl(INADDR_ANY);  
  27.     bzero(&(my_addr.sin_zero),0);  
  28.     if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))== -1) {  
  29.         perror("bind");  
  30.         exit(1);  
  31.     }  
  32.     if (listen(sockfd, BACKLOG) == -1) {  
  33.         perror("listen");  
  34.         exit(1);  
  35.     }  
  36.     while(1) {  
  37.         sin_size = sizeof(struct sockaddr_in);  
  38.         if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr,&sin_size)) == -1) {  
  39.             printf("accept failure...\n");  
  40.             perror("accept");  
  41.             continue;  
  42.         }  
  43.         //printf("server: got connection from %sn",inet_ntoa(their_addr.sin_addr));   
  44.         if (!fork()) {  
  45.             if (send(new_fd, "Hello, world!n", 14, 0) == -1)  
  46.                 perror("send");  
  47.             close(new_fd);  
  48.             exit(0);  
  49.         }  
  50.         close(new_fd);  
  51.         while(waitpid(-1,NULL,WNOHANG) > 0);  
  52.     }  
  53. }


 
  1. /*windows 端*/  
  2. #include<Winsock2.h>   
  3. #include<stdio.h>   
  4.   
  5. #pragma comment(lib,"ws2_32.lib")   
  6.   
  7. void main()  
  8. {  
  9.     int i;  
  10.     char recvBuffer[255];  
  11.     WORD wVersionRequested; //typedef unsigned short WORD; 2字节   
  12.     WSADATA wsaData;  
  13.     //WSADATA 包含了Windows Socket执行的信息。   
  14.     int err;  
  15.     wVersionRequested =MAKEWORD(1,1);  
  16.     //这个宏创建一个被指定变量连接而成的WORD变量。返回一个WORD变量。   
  17.     //第一个是socket库版本,第二个是取得的版本号。   
  18.     err=WSAStartup(wVersionRequested,&wsaData); //return 0 if successful   
  19.     if(err!=0){  
  20.         printf("Call WSAStart ERROR!");  
  21.         exit(1);  
  22.     }   //终止对WinSock库的使用   
  23.       
  24.     SOCKET SocketClient=socket(AF_INET,SOCK_STREAM,0);       //0表示让系统自己选择协议   
  25.     //定义地址结构体//填入服务器端的ip地址和端口号   
  26.     SOCKADDR_IN addrSrv;  
  27.     //转换为TCP/IP network byte order //32bit     
  28.     addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.2.14"); //192.168.0.111ip 192.168.0.130   
  29.     addrSrv.sin_family=AF_INET;                        //family address   
  30.     addrSrv.sin_port=htons(3333);                      //16bit端口号   
  31.     printf("Connect to server...\n");  
  32.     i=connect(SocketClient,(sockaddr *)&addrSrv,sizeof(SOCKADDR_IN)); //指向要建立连接的数据结构     
  33.     if(i<0){  
  34.         printf("%i\n",WSAGetLastError());  
  35.         printf("连接到192.168.0.130:25000错误!");  
  36.         exit(1);    
  37.     }  
  38.     recv(SocketClient,recvBuffer,255,0);  
  39.   
  40.     printf("%s\n",recvBuffer);   //send(socketClient,recvBuffer,20,0);   
  41.     closesocket(SocketClient);  
  42.     WSACleanup();  
  43.     return;  
  44. }  

相关内容