java
クライアントとC#
クライアントの間でソケット通信が必要ですが、問題はC#
クライアントが自分のJavaサーバーからメッセージを受信できないことです。サーバーが動作します。Java <-> C#ソケット:メッセージを受信できない
私のワークフロー:
- のJava:サーバー
- のJavaを作成します。クライアント接続
- C#のを待っている:クライアント
- のC#を作成します。サーバー
- のC#への接続を構築します。送信サーバへのmsg
- Java:msg received
- java:msgを送る#client
- c#:サーバーからメッセージを受信< - これは、クライアントがメッセージを待つが、決して取得しないポイントです。
のJava Serverコード:
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())に変更します。または、C#でReadLineを使用せずにsr.Readを使用します。 – weismat
'sr.Read'を使うと、彼はメッセージの境界を全く特定できません。それは彼がやっていることに依存するかもしれません。 –
JavaサーバーにもJavaクライアントがある場合は、JavaサーバーではなくC#クライアントを変更する必要があります。 JSONでは、ifが有効なJSONメッセージであるかどうかを判断するのは簡単です。 – weismat