vc下的通信问题
hgug 2004-01-24 08:57:25 本人用wsock32.lib写了两个基于TCP/IP的简单的通信程序,
在同一台机子不同端口上实验(编译是通过拉),server正常,
client就是连不上,ping ip不通,找主机名能找到,WHY?
(主机IP已经设为24.85.151.24)
server程序:
#include "Winsock.h"
#include "windows.h"
#include "stdio.h"
#pragma comment(lib,"wsock32.lib")
#define RECV_PORT 2000
#define SEND_PORT 3000
SOCKET sock,sock1;
sockaddr_in ServerAddr;
sockaddr_in ClientAddr;
int Addrlen;
DWORD StartSock()
{
WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)
{
printf("sock int fail !\n");
return(-1);
}
return(1);
}
DWORD CreateSocket()
{
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock==SOCKET_ERROR)
{
printf("sock create fail !\n");
WSACleanup();
return -1;
}
ServerAddr.sin_addr.s_addr=htonl(INADDR_ANY);
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(RECV_PORT);
if(bind(sock,(struct sockaddr FAR *)&ServerAddr,
sizeof(ServerAddr))==SOCKET_ERROR)
{
printf("bind is the error");
return -1;
}
return 1;
}
DWORD ConnetProcess()
{
char buff[80];
Addrlen=sizeof(sockaddr_in);
if(listen(sock,5)<0)
{
printf("Listen error");
return -1;
}
printf("Linstening.....\n");
for(;;)
{
sock1=accept(sock,(struct sockaddr FAR *)&ClientAddr,&Addrlen);
for(;;)
{
memset(buff,0,80);
if(recv(sock1,buff,80,0)<=0)
{
break;
}
printf(buff);
printf("\n");
}
}
}
int main()
{
if(StartSock()==-1)
return -1;
if(CreateSocket()==-1)
return -1;
if(ConnetProcess()==-1)
return -1;
return 1;
}
client程序:
#include "Winsock.h"
#include "windows.h"
#include "stdio.h"
#pragma comment(lib,"wsock32.lib")
#define RECV_PORT 2000
#define SEND_PORT 3000
SOCKET sock;
sockaddr_in ServerAddr;
DWORD StartSock()
{
WSADATA WSAData;
if(WSAStartup(MAKEWORD(2,2),&WSAData)!=0)
{
printf("sock init fail !");
return -1;
}
ServerAddr.sin_addr.s_addr=inet_addr("24.85.151.24");
ServerAddr.sin_family=AF_INET;
ServerAddr.sin_port=htons(RECV_PORT);
return 1;
}
DWORD CreateSocket()
{
sock=socket(AF_INET,SOCK_STREAM,0);
if(sock==SOCKET_ERROR)
{
printf("sock init fail!\n");
WSACleanup();
return -1;
}
return 1;
}
DWORD CallServer()
{
CreateSocket();
if(connect(sock,(struct sockaddr *)&ServerAddr,
sizeof(ServerAddr))==SOCKET_ERROR)
{
printf("Connect fail!\n");
closesocket(sock);
return -1;
}
return 1;
}
DWORD TCPSend(char data[])
{
int length;
length=send(sock,data,strlen(data),0);
if(length<=0)
{
printf("Send data error !\n");
closesocket(sock);
WSACleanup();
return -1;
}
return 1;
}
int main()
{
char buff[80];
int num,i;
StartSock();
while(CallServer()==-1);
printf("Connect ok !\n");
printf("press any key to send !");
getchar();
for(;;)
{
printf("Input the number of message to send :(0-exit)");
memset(buff,0,80);
scanf("%d",&num);
if(num<=0)
break;
for(i=0;i<num;i++)
{
sprintf(buff,"data%d",i);
printf(buff);
printf("\n");
TCPSend(buff);
Sleep(100);
}
}
return 0;
}