Java 将Android客户端连接到TCP C#服务器

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

我创建了一个简单的服务器代码,它接受多重连接并从客户端读取字符串(命令),其中我的客户端是一个简单的android应用程序,应该发送一个类似“GetListFoods”的请求类型

我成功地建立了连接,但进程在服务器应该读取请求的部分(服务器端)停止,无法完成其工作

我很确定我的服务器端代码,但我是新的android程序员

这是我的服务器端代码:

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()使之成功:)