ich eine Socket-Kommunikation zwischen meinen eigenen geschrieben java
Server und C#
Client benötigen, ist das Problem, dass die C#
Client keine Nachrichten von meinem Java-Server nicht empfangen können, aber Nachrichten an mein Java Senden Server funktioniert.Java <-> # Sockel C: kippen Nachrichten empfangen
mein Workflow:
- Java: Erstellen Server
- Java: Warten auf Client-Verbindung
- C#: Erstellen Sie Client-
- C#: a senden: Verbindung zum Server
- C# Bauen msg zum Server
- Java: msg empfangen
- java: senden Sie die Nachricht an C# client
- C#: empfangen von msg vom Server < - das ist der Punkt, wo der Client auf eine Nachricht wartet, aber nie bekommen.
Java Server Code:
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 "";
}
}
Mein C# Client-Code:
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;
}
}
}
Hat jemand eine Ahnung hat, warum es nie Console.WriteLine("Received: " + data);
meinen Client-Code erreicht?
Ich versuchte bereits mit Wartezeiten auf beiden Seiten. Ich bekomme keine Ausnahmen oder Fehler, daher habe ich keine Ahnung, wo mein Problem ist.
Dank
Wechseln Sie zu writer.println (msg.getMsg()); oder benutze sr.Read nicht ReadLine in C#. – weismat
Wenn er 'sr.Read' verwendet, hat er keine Möglichkeit, Nachrichtengrenzen zu identifizieren. Das könnte oder könnte nicht wichtig sein, je nachdem, was er macht. –
Wenn der Java-Server auch Java-Clients hat, muss er den C# -Client ändern, nicht den Java-Server. Mit JSON sollte es recht einfach sein zu bestimmen, ob es sich um eine gültige JSON-Nachricht handelt oder nicht. – weismat