Java (Client) und C# (Server) TCP Socket. und Server lesen unendliche letzte Daten vom Client (Java) Ich habe schon den ganzen Tag gesucht, es ist komisch.Java (Client) und C# (Server) TCP-Socket. und Server lesen unendliche letzte Daten vom Client
erstellt I 2-Client: Java (real), C# (zum Testen) wie folgt aus:
Java (Real):
Socket socket = new Socket(SyncActivity.ip,SyncActivity.port);
DataOutputStream out;
out = new DataOutputStream(socket.getOutputStream());
String s = "Hello!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$";
out.write(s.getBytes(),0,s.getBytes().length);
out.flush();
s = "Yes this another data$";
out.write(s.getBytes(),0,s.getBytes().length);
out.flush();
socket.shutdownInput();
socket.shutdownOutput();
socket.close();
Thread.currentThread().interrupt();
und C# (zum Testen)
System.Net.Sockets.TcpClient clientSocket = new System.Net.Sockets.TcpClient();
clientSocket.Connect("192.168.0.138", 11838);
NetworkStream serverStream = clientSocket.GetStream();
byte[] outStream = System.Text.Encoding.ASCII.GetBytes(textBox2.Text + "$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
Auf C# (Test) -Seite, schickte eine Daten an den Server, und der Server readed die Daten einmal und blockiert, um eine andere Daten warten. (Zweite Daten gleichen wie einmal gelesen und blockiert) Ich nur wan t so.
Auf Java (Real) -Seite, schickte zwei Daten an Server und Server 1. Daten einmal lesen und lesen die gleichen 2. Daten für immer. Die Java-Seite wird nur einmal überprüft.
Es sind vollständige Daten, die ich erhalten habe. Warum? es ist komisch.
Ergebnisse als:
auf C# (testing)
Client-Anfrage-Verbindung.
Server akzeptieren und erstellt Verbindung.
Server versuchen lesen (und Blocked)
Client senden >> TextBox
Server empfangen >> TextBox
Server versuchen lesen (und Blocked)
aber auf Java (Real):
Clientanforderung verbinden Ion.
Server akzeptieren und erstellt Verbindung.
Server versuchen lesen (und Blocked)
Client senden >> Hallo !!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Server empfangen >> Hallo !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!
Client senden >> Ja, das weitere Daten
Server versuchen Lesen
Server >> empfangen Ja, das weitere Daten
Server versuchen Lesen
Server empfangen >> Ja, das andere Daten
Server versuchen Lesen
empfangen Server >> Ja, das weitere Daten
Server versuchen Lesen
Server >> empfangen versuchen Ja, das weitere Daten
Server
Server empfangen >> Ja Dies ist ein weiterer Daten
lesenServer versuchen Lesen
Server empfangen >> Ja, das andere Daten
(und für immer und ewig)
Server Code:
TcpListener serverSocket = new TcpListener(IPAddress.Any, Convert.ToInt16(Ini.IniReadValue("About", "ServerPort", "MVS_VAN.info")));
TcpClient clientSocket = default(TcpClient);
serverSocket.Server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
serverSocket.Start();
clientSocket = serverSocket.AcceptTcpClient();
serverSocket.Stop();
NetworkStream networkStream = clientSocket.GetStream();
byte[] bytesFrom = new byte[128000];
do
{
Socket soc = clientSocket.Client;
soc.Receive(bytesFrom);
string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
MessageBox.Show("", dataFromClient);
networkStream.Flush();
//networkStream.Read(bytesFrom, 0, (int)clientSocket.ReceiveBufferSize);
//string dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom);
//dataFromClient = dataFromClient.Substring(0, dataFromClient.IndexOf("$"));
//tried^this 3 line also.
} while ((true));
clientSocket.Close();
serverSocket.Stop();
Nein, das ist nicht komisch. TCP ist ein Streaming-Protokoll. Ein 'Send()' entspricht keinem 'Receive()'. Sie müssen weiterlesen, den von "Receive()" zurückgegebenen Wert nicht ignorieren und den Puffer so lange anhängen, bis Sie wissen, dass Sie eine ganze Nachricht erhalten haben. – CodeCaster
@CodeCaster Es sind vollständige Daten, die ich erhalten habe. und halten Sie es lesen Sie die gleichen Daten. Es wird in der normalen Situation blockiert, um die Daten nur einmal zu lesen. – nyconing
Ja, ich habe keine Ahnung, was du damit meinst. Dieser Code ist defekt, Sie sollten keine Sockets verwenden, wenn Sie nicht wissen, was Sie tun, sondern stattdessen ein HTTP-Protokoll höherer Ebene verwenden. – CodeCaster