- 论坛徽章:
- 0
|
本帖最后由 chenrychan 于 2015-08-19 22:16 编辑
各位大神好!
本人刚开始接触LINUX编程,现打算用两台计算机进行TCP/IP通信:其中一台(LINUX 2.6.3 作为服务端,另一台(WINDOWS XP)作为客户端,但客户端始终无法CONNECT上服务端。请各位大神帮忙看看是否代码有误,或者是不是LINUX系统还有什么配置需要设置。
PS:1、两台计算机的IP分别为192.168.0.2(LINUX)和192.168.0.5(WINDOWS)且能相互PING通;
2、因为有多余的XP计算机,所以做了WINDOWS下的TCP/IP通信实验,两台XP计算机能正常通信,所以WINDOWS版的客户端程序应该没有问题。
我是分割线
LINUX下的服务端程序如下:
#include <iostream>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <errno.h>
#include <string.h>
using namespace std;
int main()
{
fd_set fs_read;
int sockfd, new_fd, nn;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size, portnumber;
char hello[]="Hello!";
char RBuff[2048];
if((sockfd=socket(AF_INET, SOCK_STREAM, 0))==-1)
{
cout<<"Socket err:"<<strerror(errno)<<endl;
return 0;
}
bzero(&server_addr, sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = INADDR_ANY;
server_addr.sin_port = htons(9527);
if(bind(sockfd, (struct sockaddr *)(&server_addr), sizeof(struct sockaddr))==-1)
{
cout<<"Bind err:"<<strerror(errno)<<endl;
return 0;
}
if(listen(sockfd, 10)==-1)
{
cout<<"Listen err:"<<strerror(errno)<<endl;
return 0;
}
socklen_t len;
len = sizeof(client_addr);
sin_size = sizeof(struct sockaddr);//(struct sockaddr *)(&client_addr), &sin_size)
cout<<"Accept CC"<<endl;
if((new_fd=accept(sockfd, (struct sockaddr *)(&client_addr), &len))==-1)
{
cout<<"Accept err:"<<strerror(errno)<<endl;
return 0;
}
cout<<new_fd<<endl;
cout<<"Accept ZS"<<endl;
close(new_fd);
close(sockfd);
return 0;
}
我是分割线
WINDOWS下的客户端程序如下:
#include <stdio.h>
#include <Winsock.h>
#include <errno.h>
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if (err!=0)
{
return FALSE;
}
if (LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return FALSE;
}
SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
memset(&addrSrv,0,sizeof(addrSrv));
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.0.2" ;
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(9527);
if(connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))==-1)
{
printf("%s\n",strerror(errno));
}
closesocket(sockClient);
WSACleanup();
return FALSE;
}
我是分割线
LINUX系统的ifconfig结果如下图
LINUX系统的netstat -anp结果如下图
纠结好几天了,拜托各位大神了。 |
|