VMware で Ubuntu 11.10 を実行しています。Java tcp サーバーを Ubuntu で実行しています。したがって、このサーバーを Ubuntu のクライアントに接続すると、正常に動作します。しかし、別の OS (Windows 7) からこのサーバーに接続しようとすると、接続エラーが表示されます。Java と C# クライアントの両方に接続しようとしましたが、両方とも接続エラーが表示されます。エラーメッセージは次のとおりです。
System.Net.Sockets.SocketException: ターゲット マシンが System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) で System.Net.Sockets.Socket で 192.168.0.129:20000 をアクティブに拒否したため、接続できませんでした.Connect(EndPoint remoteEP) at TestUbuntuSocket.Form1.button1_Click(オブジェクト送信者、EventArgs e) System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System. Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) で System.Windows.Forms.Control.WmMouseUp(Message& m、MouseButtons ボタン、Int32 クリック) で System.Windows.Forms.Control.WndProc(Message& m) で System.Windows。 System.Windows の System.Windows.Forms.Button.WndProc(Message& m) の 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 Local Address Foreign Address State 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 :::* リッスン 2168/java
tcp6 0 0 :::22 :::* リッスン 408/sshd
tcp6 0 0 ::1:631 :::* リッスン 925/cupsd
tcp6 0 0 :::20000 :::* リッスン 3015/java
tcp6 0 0 127.0.0.1:20000 127.0.0.1:56269 CLOSE_WAIT 3015/java
だから私は間違っていますか?