Java 将Android客户端连接到TCP C#服务器
我创建了一个简单的服务器代码,它接受多重连接并从客户端读取字符串(命令),其中我的客户端是一个简单的android应用程序,应该发送一个类似“GetListFoods”的请求类型 我成功地建立了连接,但进程在服务器应该读取请求的部分(服务器端)停止,无法完成其工作 我很确定我的服务器端代码,但我是新的android程序员 这是我的服务器端代码:Java 将Android客户端连接到TCP C#服务器,java,c#,android,tcp,server,Java,C#,Android,Tcp,Server,我创建了一个简单的服务器代码,它接受多重连接并从客户端读取字符串(命令),其中我的客户端是一个简单的android应用程序,应该发送一个类似“GetListFoods”的请求类型 我成功地建立了连接,但进程在服务器应该读取请求的部分(服务器端)停止,无法完成其工作 我很确定我的服务器端代码,但我是新的android程序员 这是我的服务器端代码: public class Server { private int _Port; private TcpList
public class Server
{
private int _Port;
private TcpListener _Listener;
private bool _Listening = false;
public Server()
{
_Port = 5050;
}
public void Start()
{
_Listener = new TcpListener(IPAddress.Any, _Port);
_Listener.Start();
_Listening = true;
_Listener.BeginAcceptTcpClient(HandleAcceptTcpClient, _Listener);
}
private void HandleAcceptTcpClient(IAsyncResult result)
{
if(_Listening)
{
_Listener.BeginAcceptTcpClient(HandleAcceptTcpClient, _Listener);
TcpClient client = _Listener.EndAcceptTcpClient(result);
ClientConnection connection = new ClientConnection(client);
ThreadPool.QueueUserWorkItem(connection.HandleConnection, client);
}
}
}
connection类只是一个处理客户端请求的简单类:
class ClientConnection
{
internal TcpClient _controlClient;
private NetworkStream _controlStream;
private StreamReader _controlReader;
private StreamWriter _controlWriter;
public ClientConnection(TcpClient client)
{
_controlClient = client;
_controlStream = _controlClient.GetStream();
_controlReader = new StreamReader(_controlStream);
_controlWriter = new StreamWriter(_controlStream);
}
public void HandleConnection(object obj)
{
try
{
string line;
while(!string.IsNullOrEmpty(line = _controlReader.ReadLine()))
{
//Make Some work here
}
}
catch (Exception ex)
{
}
}
}
我需要从我的Android应用程序发出一个简单的请求,
这是我的密码:
public class Main extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button start = (Button)findViewById(R.id.start);
start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ConnectToServer server = new ConnectToServer();
server.execute("GetList");
}
});
}
public class ConnectToServer extends AsyncTask<String, String, Void> {
PrintWriter out;
BufferedReader in;
Socket client;
public ConnectToServer() {
}
@Override
protected Void doInBackground(String... params) {
try {
//byte[] message = params[0].getBytes();
client = new Socket();
client.connect(new InetSocketAddress("X.X.X.X", 5050));
} catch (UnknownHostException host) {
host.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out.write(params[0]);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}
}
public类主活动{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
按钮开始=(按钮)findViewById(R.id.start);
start.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
ConnectToServer服务器=新的ConnectToServer();
执行(“GetList”);
}
});
}
公共类ConnectToServer扩展异步任务{
打印输出;
缓冲读取器;
套接字客户端;
公共连接服务器(){
}
@凌驾
受保护的Void doInBackground(字符串…参数){
试一试{
//字节[]消息=参数[0]。getBytes();
client=newsocket();
connect(新的InetSocketAddress(“X.X.X.X”,5050));
}catch(UnknownHostException主机){
printStackTrace();
}捕获(IOEX异常){
例如printStackTrace();
}
试一试{
out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream()),true);
in=new BufferedReader(新的InputStreamReader(client.getInputStream());
out.write(参数[0]);
}捕获(例外情况除外){
例如printStackTrace();
}
返回null;
}
}
}
提前感谢:)有什么问题吗?我不清楚您面临什么问题。如何使它通过readLine()行并将请求的值返回到参数行,因为它在那里被阻止,而没有读取任何@PrerakSolatry out.println(xx);out.flush();在客户端上。我已经尝试了out.flush(),但问题没有改变,所以我将尝试out.println(),@GaryYKim非常感谢@GaryYKim,out.println()使之成功:)