利用socket编写windows和linux通讯程序
发表于:2007-07-14来源:作者:点击数:
标签:
socket编程大家都很熟悉,我在这里就不再罗嗦了。直接切入正题。该程序分两部分,server端和client端(谁都知道)。其中server端采用windows平台,那linux平台当然是client端了。 这里是server端程序: /**********************************/ /* it worked a
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=a
clearcase/" target="_blank" >ccept(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=
.net_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;
}
原文转自:http://www.ltesting.net