Tôi đang tạo một chương trình theo 2 phần.Ổ cắm - Máy khách Java, Máy chủ C#
Phần 1: C# server-socket Ứng dụng chạy trên PC, nghe lệnh và hành động tương ứng.
Phần 2: Ứng dụng Java client-socket chạy trên điện thoại, gửi lệnh đến máy tính, khi nhấn nút.
Hiện tại, tôi có thể gửi lệnh từ máy khách đến máy chủ và tất cả đều tốt. Nhưng vấn đề của tôi là: Khi tôi gửi một lệnh cụ thể đến máy chủ, tôi muốn máy chủ trả lời ứng dụng khách và khách hàng đọc câu trả lời đó.
Thing chỉ là khi khách hàng cố gắng đọc, nó hết thời gian.
Java chương trình khách hàng:
class ClientThread implements Runnable
{
public void run()
{
try
{
Socket socket = new Socket(serverIpAddress, serverPort);
socket.setSoTimeout(5000);
while (true)
{
try
{
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
Log.d("Nicklas", "Out it goes");
out.println(Command);
if (Command == "CMD:GetOptions<EOF>")
{
Log.d("Nicklas", "Getting options");
try
{
Log.d("Nicklas", "Line 1");
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Log.d("Nicklas", "Line 2");
String answer = in.readLine();
Log.d("Nicklas", "answer = " + answer);
}
catch (Exception ee)
{
Log.d("Nicklasasasas", ee.toString());
}
}
break;
}
catch (Exception e)
{
Log.d("Nicklas", "CAE = " + e.toString());
break;
}
}
socket.close();
}
catch (ConnectException ee)
{
Log.d("Nicklas", "Kunne ikke forbinde");
}
catch (Exception e)
{
Log.d("Nicklasssssss", e.toString());
}
}
}
này được gọi với:
Thread cThread = new Thread(new ClientThread());
cThread.start();
Và sử dụng các biến toàn cục "Command", mà sẽ chứa các thông tin khác nhau, tùy thuộc vào những nút được nhấn.
Chương trình không thành công trên dòng "String answer = in.readline();" với ngoại lệ "java.net.SocketTimeoutException".
Đây là phần C# Máy chủ của chương trình:
private void ListenForClients()
{
this.tcpListener.Start();
while (true)
{
//blocks until a client has connected to the server
TcpClient client = this.tcpListener.AcceptTcpClient();
//create a thread to handle communication
//with connected client
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
private void HandleClientComm(object client)
{
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[4096];
int bytesRead;
while (true)
{
bytesRead = 0;
try
{
//blocks until a client sends a message
bytesRead = clientStream.Read(message, 0, 4096);
}
catch
{
//a socket error has occured
break;
}
if (bytesRead == 0)
{
//the client has disconnected from the server
break;
}
//message has successfully been received
ASCIIEncoding encoder = new ASCIIEncoding();
//System.Diagnostics.Debug.WriteLine(encoder.GetString(message, 0, bytesRead));
string Input = (encoder.GetString(message, 0, bytesRead));
Input = Input.Trim();
object[] obj = new object[1];
obj[0] = Input;
if (Input == "CMD:GetOptions<EOF>")
{
try
{
byte[] buffer = encoder.GetBytes("CMD:Accepted");
clientStream.Write(buffer, 0, buffer.Length);
clientStream.Flush();
MessageBox.Show("Client program asked for reply");
}
catch (Exception e)
{
MessageBox.Show("Oh it no work!: " + e.ToString());
}
}
else
{
Udfor(Input);
}
}
tcpClient.Close();
}
gọi với những điều sau đây, trong Form1()
this.tcpListener = new TcpListener(IPAddress.Any, 4532);
this.listenThread = new Thread(new ThreadStart(ListenForClients));
this.listenThread.Start();
C# Máy chủ dường như làm việc tốt, và không hiển thị hộp thư "chương trình khách hàng được yêu cầu trả lời"
Bất kỳ ai có thể phát hiện lỗi?
Bạn có gặp sự cố là khách hàng dường như không nhận được phản hồi từ máy chủ không? SocketTimeoutException được ném khi không nhận được phản hồi nào bởi socket trong khoảng thời gian chờ nhất định, 5 giây trong ví dụ của bạn. Bạn có chắc máy chủ đang gửi phản hồi không? – Kerry
Vâng, không chắc chắn 100%, nhưng 99% C# Chương trình: nếu (Input == "CMD: GetOptions") { byte [] buffer = encoder.GetBytes ("CMD: Accepted"); clientStream.Write (bộ đệm, 0, buffer.Length); clientStream.Flush(); MessageBox.Show ("Oh nó muốn tùy chọn zeh"); } Điều này được chạy sau khi nhận được tin nhắn. Nó cũng cho thấy MessageBox cuối cùng, do đó, im khá chắc chắn nó gửi trả lời –
user1285334