我在 vmware 中运行了 Ubuntu 11.10。我在 Ubuntu 中运行 Java tcp 服务器。因此,当我将此服务器与来自 Ubuntu 的客户端连接时,它工作正常。但是当我试图从另一个操作系统(Windows 7)连接这个服务器时,它显示连接错误。我尝试连接 java 和 C# 客户端,但两次都显示连接错误。这是错误消息:
System.Net.Sockets.SocketException:无法建立连接,因为目标机器在 System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) 处主动拒绝了它 192.168.0.129:20000 在 System.Net.Sockets.Socket .Connect(EndPoint remoteEP) at TestUbuntuSocket.Form1.button1_Click(Object sender, EventArgs e) at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System。 Windows.Forms.Button.OnMouseUp(MouseEventArgs meevent) 在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows。在 System.Windows.Forms.Button.WndProc(Message& m) 在 System.Windows 的 Forms.ButtonBase.WndProc(Message& m)。Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
这是我的 C# 客户端套接字代码:
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect(new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text)));
if (s.Connected)
{
s.Send(Encoding.ASCII.GetBytes(textBox3.Text));
}
else
MessageBox.Show("Not Connected");
这是我的 Java 客户端套接字代码:
Socket socket = null;
try{
socket = new Socket(txtIp.getText(), Integer.parseInt(txtPort.getText()));
}
catch(Exception exc){
JOptionPane.showMessageDialog(this, "Server is not available!!");
return;
}
try{
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
out.println(txtMessage.getText());
socket.close();
}
catch(Exception exc){
JOptionPane.showMessageDialog(this, "Error when sending data!!");
}
服务器 Java 代码:
ServerSocket s = new ServerSocket(port);
while (start)
{
Socket incoming = s.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
String message = "";
String line = in.readLine();
while(line != null){
message += line;
line = in.readLine();
}
JOptionPane.showMessageDialog(null, message);
}
这是“sudo netstat -atnp”的输出:
Proto Recv-Q Send-Q 本地地址 外部地址 状态 PID/程序名称 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 408/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 925/cupsd
tcp6 0 0 ::1:42098 :::* LISTEN 2168/java
tcp6 0 0 :::22 :::* LISTEN 408/sshd
tcp6 0 0 ::1:631 :::* LISTEN 925/cupsd
tcp6 0 0 :::20000 :::* LISTEN 3015/java
tcp6 0 0 127.0.0.1:20000 127.0.0.1:56269 CLOSE_WAIT 3015/java
那么我错了吗?