客户端套接字无法接收消息表单服务器 [英] Client socket cannot recieve message form server

查看:110
本文介绍了客户端套接字无法接收消息表单服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嘿我在c#代码中使用套接字服务器并从服务器发送消息但客户端无法接收消息。如果我在c#中创建客户端,它可以正常工作。请帮助`public class TCPClient {



private String serverMessage;

public static final String SERVERIP =10.0.0.121; //你的计算机IP地址

public static final int SERVERPORT = 8221;

private OnMessageReceived mMessageListener = null;

private boolean mRun = false;



PrintWriter out;

BufferedReader in;



/ **

*类的构造函数。 OnMessagedReceived侦听从服务器收到的消息

* /

public TCPClient(OnMessageReceived listener){

mMessageListener = listener;

}



/ **

*将客户输入的消息发送到服务器

*客户输入的@param消息文本

* /

public void sendMessage(String message){

if(out!= null &&!out) .checkError()){

out.println(message);

out.flush();

}

}



public void stopClient(){

mRun = false;

}



public void run(){



mRun = true;



尝试{

//这里你必须把你计算机的IP地址。

InetAddress serverAddr = InetAddress.getByName(SERVERIP);



Log.e(TCP客户端,C:正在连接......);



//创建一个套接字来与服务器建立连接

套接字套接字=新套接字(serverAddr,SERVERPORT);



尝试{



//将消息发送到服务器

out = new PrintWriter(new BufferedWriter(new OutputStreamWriter) .getOutputStream())),true);



Log.e(TCP Client,C:Sent。);



Log.e(TCP客户端,C:完成。);



//收到服务器的消息发送回

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));



//此时客户端侦听对于服务器发送的消息

while(mRun){

serverMessage = in.readLine();



if(serverMessage!= null && mMessageListener!= null){

//从MyActivity类调用方法messageReceived

mMessageListener.messageReceived(serverMessage);

}

serverMessage = null;



}



Log.e(从服务器响应,S:收到消息:'+ serverMessage + ');



} catch(例外e){



Log.e(TCP ,S:错误,e);



}最后{

//套接字必须关闭。关闭后无法重新连接到此套接字

//,这意味着必须创建一个新的套接字实例。

socket.close(); < br $>
}



} catch(例外e){



Log.e (TCP,C:错误,e);



}



}



//声明接口。方法messageReceived(String message)必须在myActivity

//类中实现asynckTask doInBackground

public interface OnMessageReceived {

public void messageReceived(String message);

}

}`先谢谢..

Hey i am using socket server in c# code and send message from the server but client can't recieve message.if i create client in c# it works fine. Please help ` public class TCPClient {

private String serverMessage;
public static final String SERVERIP = "10.0.0.121"; //your computer IP address
public static final int SERVERPORT = 8221;
private OnMessageReceived mMessageListener = null;
private boolean mRun = false;

PrintWriter out;
BufferedReader in;

/**
* Constructor of the class. OnMessagedReceived listens for the messages received from server
*/
public TCPClient(OnMessageReceived listener) {
mMessageListener = listener;
}

/**
* Sends the message entered by client to the server
* @param message text entered by client
*/
public void sendMessage(String message){
if (out != null && !out.checkError()) {
out.println(message);
out.flush();
}
}

public void stopClient(){
mRun = false;
}

public void run() {

mRun = true;

try {
//here you must put your computer's IP address.
InetAddress serverAddr = InetAddress.getByName(SERVERIP);

Log.e("TCP Client", "C: Connecting...");

//create a socket to make the connection with the server
Socket socket = new Socket(serverAddr, SERVERPORT);

try {

//send the message to the server
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);

Log.e("TCP Client", "C: Sent.");

Log.e("TCP Client", "C: Done.");

//receive the message which the server sends back
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

//in this while the client listens for the messages sent by the server
while (mRun) {
serverMessage = in.readLine();

if (serverMessage != null && mMessageListener != null) {
//call the method messageReceived from MyActivity class
mMessageListener.messageReceived(serverMessage);
}
serverMessage = null;

}

Log.e("RESPONSE FROM SERVER", "S: Received Message: '" + serverMessage + "'");

} catch (Exception e) {

Log.e("TCP", "S: Error", e);

} finally {
//the socket must be closed. It is not possible to reconnect to this socket
// after it is closed, which means a new socket instance has to be created.
socket.close();
}

} catch (Exception e) {

Log.e("TCP", "C: Error", e);

}

}

//Declare the interface. The method messageReceived(String message) will must be implemented in the MyActivity
//class at on asynckTask doInBackground
public interface OnMessageReceived {
public void messageReceived(String message);
}
} ` Thanks in advance..

推荐答案

首先,你不应该硬编码你的IP:

First, you should not hardcode your IP:
public static final String SERVERIP = "10.0.0.121";



而不是使用getLocalHost()来获取你的地址。

服务器需要ServerSocket和一个无限循环的线程来调用accept()

套接字用于必须connect()到服务器的客户端地址和端口(因为使用TCP)


instead use getLocalHost() to get your address.
Server needs ServerSocket and a thread in infinite loop to call accept()
Socket is for the client with must connect() to Server address and port (since using TCP )


这篇关于客户端套接字无法接收消息表单服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆