【发布时间】:2014-02-15 14:14:43
【问题描述】:
首先,我想感谢您抽出宝贵时间...
我在我的 macbook 中用 c++ 创建了一个服务器套接字,并在运行 windows xp 的不同机器中使用 Java 创建了一个客户端/套接字。我已将端口指定为 5000,但我无法指定正确的主机,因此无法建立连接。当我使用 WinSock2 在 windows xp 中创建一个 c++ 服务器/套接字时,连接是完美的,因为我使用了 localhost...任何想法???
提前谢谢
C++ 代码
int main(int argc, const char** argv) {
/* SOCKET VARIABLES */
int sock;
struct sockaddr_in server;
int mysock;
char buff[1024];
int rval;
/*CREATE SOCKET*/
sock =socket(AF_INET, SOCK_STREAM, 0);
if (sock<0)
{
perror("*FAILED TO CREATE SOCKET*");
exit(1);
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=5000;
/*CALL BIND*/
if (bind(sock, (struct sockaddr *)&server, sizeof(server)))
{
perror("BIND FAILED");
exit(1);
}
/*LISTEN*/
listen(sock, 5);
/*ACCEPT*/
do{
mysock= accept(sock, (struct sockaddr *) 0, 0);
if (mysock==-1)
{
perror ("ACCEPT FAILED");
}
else
{
memset(buff, 0, sizeof(buff));
if ((rval=recv(mysock, buff, sizeof(buff), 0)) <0) {
perror("READING STREAM MESSAGE ERROR");
}
else if(rval==0)
printf("Ending connection");
else
printf("MSG: %s\n", buff);
printf("GOT THE MESSAGE (rval = %d)\n", rval);
}
return 0;
}while (1) ;
Java 代码
导入 java.io.; 导入 java.net.;
公共类 SOK_1_CLIENT {
public void run() throws Exception
{
Socket SOCK =new Socket ("localhost",5000);
PrintStream PS =new PrintStream(SOCK.getOutputStream());
PS.println("HELLO TO SERVER FROM CLIENT");
InputStreamReader IR =new InputStreamReader(SOCK.getInputStream());
BufferedReader BR = new BufferedReader(IR);
String MESSAGE =BR.readLine();
System.out.println(MESSAGE + "java");
}
}
【问题讨论】:
-
如果你没有 DNS 服务器,你应该使用服务器的 ip 而不是“localhost”
-
如果您没有 DNS、WINS 或设置
hosts文件,则需要使用 IP 地址。 -
我将java代码从Socket SOCK =new Socket ("localhost",5000); to Socket SOCK =new Socket ("172.16.149.14",5000);我的服务器 ip 但我得到相同的错误...服务器工作但客户端无法连接
-
你是在同一个局域网上测试吗? IP 地址 172.16.149.14 似乎不是标准的本地 IP 地址,在这种情况下它可能会被防火墙阻止?
-
添加到骗局:每个主机可以ping对方?