利用socket编写windows和linux通讯程序

原创 2003年04月11日 09:07:00

    socket编程大家都很熟悉,我在这里就不再罗嗦了。直接切入正题。
该程序分两部分,server端和client端(谁都知道)。其中server端采用windows平台,那linux平台当然是client端了。
这里是server端程序:
/**********************************/
/* it worked as server under windows platform */
/* written by mlsx 1998-2-7                     */
/************************************/

include <windows.h>
#include <stdio.h>
#pragma comment (lib,"WS2_32.lib")
#define USERPORT 10001
#define HOST_IP_ADDR "127.0.0.1"

main(int argc,char *argv[])
{
 char buf[128];
 SOCKET s,ns;
 struct sockaddr_in client;
 struct sockaddr_in server;
 int namelen,pklen;
 int status;
 WSADATA wsd;
 if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0)
 {
  perror("wsastartup() failed:");
   exit(1);
 }
 if((s=socket(AF_INET,SOCK_STREAM,0))< 0)
 {
  perror("socket failed :");
  exit(1);
 }
 ZeroMemory(&server,sizeof(server));
 server.sin_family=AF_INET;
 server.sin_port=htons(USERPORT);
 server.sin_addr.s_addr=htons(INADDR_ANY);
 if(bind(s,(struct sockaddr *)&server,sizeof(server))<0)
 {
  perror("bind() failed:");
  exit(2);
 }
 if(listen(s,4)!=0)
 {
  perror("listen()failed :");
  exit(3);
 }
 while(1)
 {
 namelen=sizeof(client);
 if((ns=accept(s,(struct sockaddr*)&client,&namelen))==-1)
 {
  perror("accept()failed:");
  exit(4);
 }
 printf("accept successful");
 for(;;)
 {
  if((pklen=recv(ns,buf,128,0))<0)
  {
   perror("recv() failed:");
   exit(5);
  }
  else
   if(pklen==0)
   {
    printf("recv():return FAILED,connected is shut down");
    break;
   }
   else
    printf("recv():return success,packet length=%d context is %s/n",pklen,buf);
  
  Sleep(1);
  //printf("the buf is %s/n",buf);
  if(send(ns,buf,128,0)<0)
  {
   perror("send() failed:");
   break;
  }
  else
   printf("send() return success packet length is %d/n",pklen);
 }
 }
 closesocket(ns);
 closesocket(s);
 printf("server ended successfully/n");
}

 

这里是client端程序:

/**********************************/
/* it worked as client under linux platform */
/* written by mlsx 1998-2-7                     */
/************************************/
#include <windows.h>
//#include <winsock2.h>
#include <stdio.h>
#pragma comment (lib,"WS2_32.lib")
#define USERPORT 5003
main(int argc,char *argv[])
{
 char buf[128];
 SOCKET sclient;
 struct sockaddr_in server;
 int namelen,pklen;
 int status,ret;
 char szmessage[128];
 WSADATA wsd;
 if(argc<2)
 {
  printf("usage:/n");
  printf("%s ipaddr",__FILE__);
  printf("ipaddr is the server's ip address,like xxx.xxx.xxx.xxx/n");
  exit(1);
 }
 if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0)
 {
  perror("wsastartup() failed:");
   exit(1);
 }
 if((sclient=socket(AF_INET,SOCK_STREAM,0))< 0)
 {
  perror("socket failed :");
  exit(1);
 }
 ZeroMemory(&server,sizeof(server));
 ZeroMemory(szmessage,sizeof(szmessage));
 server.sin_family=AF_INET;
 server.sin_port=htons(USERPORT);
 server.sin_addr.s_addr=inet_addr(argv[1]);
 if(connect(sclient,(struct sockaddr *)&server,sizeof(server))<0)
 {
  perror("connect() failed :");
  printf("%d",WSAGetLastError());
  exit(3);
 }
 namelen=sizeof(sclient);
 
 /*for(ret=0;ret<10;ret++)
 {
  
  if(send(sclient,szmessage,sizeof(szmessage),0)<0)
  {
   perror("send() failed:");
   break;
  }
 
  printf("send() return success/n  context is %s /n",szmessage);
  if((pklen=recv(sclient,buf,sizeof(buf),0))<0)
  {
   perror("recv() failed:");
   exit(5);
  }
  else
   if(pklen==0)
   {
    printf("recv():return FAILED,connected is shut down");
    break;
   }
   else
   {
    printf("the pktlen is %d/n",pklen);
    buf[pklen]='/0';
    printf("recv():return success/npacket length=%d and the context is %s/n",pklen,buf);
    ZeroMemory(buf,sizeof(buf));
   }
   Sleep(10);
 }*/
 //while(strcmp(szmessage,"q"))
 while(1)
 {
  
  ZeroMemory(szmessage,sizeof(szmessage));
  //scanf("%s",szmessage);
  //puts(szmessage);
  //gets(szmessage);
  //send(sclient,szmessage,sizeof(szmessage),0);
  //Sleep(10);
  ZeroMemory(buf,sizeof(buf));
  ret=recv(sclient,buf,sizeof(buf),0);
  buf[ret]='/0';
  //printf("%s the length is %d ",buf,ret);
  puts(buf);
  Sleep(1);
  
 }
 
  
 closesocket(sclient);
 WSACleanup();
 printf("server ended successfully/n");
 return 0;
}

Linux作为服务端,Windows作为客户端socket通信

众所周知:Linux作为服务器但安全可靠.所以尝试使用Linux作为服务器,Windows作为客户端的C/S简单架构. 直接上源码: Linux下的服务器端文件.cpp,然后再用g++编译链接下就...
  • qq_24571549
  • qq_24571549
  • 2017年07月02日 14:35
  • 441

windows下,python基于SocketServer模拟实现SSH(多线程版)

这两天,学习了python的套接字编程(linux版),我发现好多的资料都是linux的,然而python这个利器显然是跨平台的,所以,我根据linux版的资料来写一点windows的东西,希望对大家...
  • Vivid_110
  • Vivid_110
  • 2015年06月29日 08:50
  • 2708

c++ Windows Socket实现最简单的C/S网络通信(TCP)

1.服务器端代码: #include #include #pragma comment(lib, "ws2_32.lib") #define CONNECT_NUM_MAX 10 using na...
  • doudouxuexi
  • doudouxuexi
  • 2015年09月18日 12:37
  • 2941

Linux利用socket实现两台pc之间的数据传输功能,包括windows到linux,UDP实现

makefile 和TCP一样,参见上一篇博文 客户端和服务端主函数也和上一篇的tcp是一样的,同样参考上一篇博文,这里只是修改了pub.c的文件了 #ifdef WIN #include #e...
  • HelloNiGeSB
  • HelloNiGeSB
  • 2016年07月14日 18:01
  • 1144

Linux下socket编程实现客户机服务器通信的例子

Linux下socket编程实现客户机服务器通信的例子经典的在同一台主机上两个进程或线程之间的通信通过以下三种方法 管道通信(Pipes) 消息队列(Message queues) 共享内存通信(Sh...
  • violet_echo_0908
  • violet_echo_0908
  • 2015年11月01日 00:52
  • 1636

小练习:用socket实现Linux和Windows之间的通信

结合了网上一些经典例程,写了一个简单的socket代码,实现Ubuntu(虚拟机中)和Windows的通信。...
  • liyuefeilong
  • liyuefeilong
  • 2015年08月04日 00:07
  • 3927

Windows Socket 编程_ 简单的服务器/客户端程序

一、Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换。 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地...
  • lbaihao
  • lbaihao
  • 2017年06月23日 18:01
  • 235

编写程序实现多次通信 (socket和多线程)

编写程序实现多次通信 (socket和多线程)
  • zjs261019
  • zjs261019
  • 2016年11月07日 11:00
  • 234

Linux socket 本地进程间通信

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一...
  • u010073981
  • u010073981
  • 2016年02月26日 01:00
  • 1335

Linux Socket编程:基于TCP/IP的客户端与服务端通讯实例

Linux Socket编程:基于TCP/IP的客户端与服务端通讯实例服务端代码#include #include #include #include #include #include i...
  • techping
  • techping
  • 2017年03月29日 17:49
  • 1083
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用socket编写windows和linux通讯程序
举报原因:
原因补充:

(最多只允许输入30个字)