我需要我自己寫的java
服務器和C#
客戶端之間的套接字通信,問題是,C#
客戶端無法收到來自我的Java服務器的任何消息,但將消息發送到我的Java服務器工作。的Java <-> C#插座:不能接收郵件
我的工作流程:
- 的Java:創建服務器
- 的Java:等待客戶端連接
- C#:創建客戶端
- C#:建立到服務器的連接
- C#:發送msg到服務器
- Java:msg收到
- java:發送消息到c #客戶端
- c#:從服務器接收msg < - 這是客戶端等待消息但從未獲取的點。
Java服務器代碼:
public class Communicator {
private int m_port;
private Socket m_socket;
private ServerSocket m_serverSocket;
public Communicator(int port) {
this.m_port = port;
initConnection();
}
private void initConnection() {
try {
System.out.println("Creating Server");
m_serverSocket = new ServerSocket(m_port);
System.out.println("Waiting for client connection");
m_socket = m_serverSocket.accept();
System.out.println("Connection made");
} catch (IOException e) {
e.printStackTrace();
}
}
public String sendMsg(JSONMessage msg) {
try {
//get msg
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(m_socket.getInputStream()));
System.out.println("Waiting for msg...");
String answer = bufferedReader.readLine();
System.out.println("Received: " + answer);
//send msg
PrintWriter writer = new PrintWriter(m_socket.getOutputStream(),true);
writer.print(msg.getMsg());
System.out.println("Sending: " + msg.getMsg());
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
}
我的C#的客戶端代碼:
class Communicator
{
private int m_port;
private Thread mainThread;
public Communicator(int port)
{
m_port = port;
mainThread = new Thread(new ThreadStart(this.initConnection));
mainThread.Start();
}
public void initConnection()
{
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), m_port);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
Console.WriteLine("Trying to build connection");
server.Connect(ip);
Console.WriteLine("Connection successful");
NetworkStream ns = new NetworkStream(server);
StreamReader sr = new StreamReader(ns);
StreamWriter sw = new StreamWriter(ns);
string data;
string welcome = "Hello";
Console.WriteLine("Sending: " + welcome);
sw.WriteLine(welcome);
sw.Flush();
Console.WriteLine("Receiving...");
data = sr.ReadLine();
// --> NEVER REACHING THIS POINT <---
Console.WriteLine("Received: " + data);
}
catch (SocketException e)
{
Console.WriteLine("Connection failed.");
return;
}
}
}
是否有人有任何想法,爲什麼它從來沒有達到我的客戶端代碼Console.WriteLine("Received: " + data);
?
我已經嘗試過在兩邊等待。我沒有得到任何例外或錯誤,所以我不知道我的問題在哪裏。
感謝
更改爲writer.println(msg.getMsg());或者使用sr.在C#中沒有ReadLine。 – weismat 2012-03-28 06:57:54
如果他使用'sr.Read',他將無法識別消息邊界。這取決於他在做什麼可能或不重要。 – 2012-03-28 06:59:23
如果Java服務器也有Java客戶端,那麼他需要更改C#客戶端,而不是Java服務器。使用JSON,它應該是相當直接的,以確定是否是有效的JSON消息。 – weismat 2012-03-28 07:10:08