gpt4 book ai didi

c# - 如何让 Android 上的客户端监听 C# 上的服务器?

转载 作者:可可西里 更新时间:2023-11-01 02:31:16 28 4
gpt4 key购买 nike

我在 Android 上有一个客户端,在 C# 上有一个服务器。客户端向服务器发送消息,没问题。但是我需要服务器根据请求发送指定目录中的文件夹和文件列表,但我不知道该怎么做,因为客户端没有从服务器收到任何消息。用于监听的客户端代码部分不起作用,应用程序只是卡住,直到我关闭服务器应用程序,然后它再次运行,但仍然没有读取任何内容。提前致谢

客户:

package com.app.client.app;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import android.util.Log;

public class my_activity extends Activity {
private TextView txt;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button b = (Button)findViewById(R.id.button1);
txt = (TextView)findViewById(R.id.textView1);


b.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
connectSocket("Hello");

}
});
}

private void connectSocket(String a){

try {
InetAddress serverAddr = InetAddress.getByName("192.168.1.2");
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, 4444);

message = "1";

PrintWriter out = null;
BufferedReader in = null;

try {
Log.d("TCP", "C: Sending: '" + message + "'");
out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

out.println(message);
while ((in.readLine()) != null) {
txt.append(in.readLine());
}

Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");

} catch(Exception e) {
Log.e("TCP", "S: Error", e);
} finally {
socket.close();
}

} catch (UnknownHostException e) {
// TODO Auto-generated catch block
Log.e("TCP", "C: UnknownHostException", e);
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
Log.e("TCP", "C: IOException", e);
e.printStackTrace();
}
}
}

服务器:

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;

public class serv {
public static void Main() {
try {
IPAddress ipAd = IPAddress.Parse("192.168.1.2");
// use local m/c IP address, and

// use the same in the client


/* Initializes the Listener */
TcpListener myList=new TcpListener(ipAd,4444);

/* Start Listeneting at the specified port */
myList.Start();

Console.WriteLine("The server is running at port 4444...");
Console.WriteLine("The local End point is :" +
myList.LocalEndpoint );
Console.WriteLine("Waiting for a connection.....");
m:
Socket s=myList.AcceptSocket();
Console.WriteLine("Connection accepted from " + s.RemoteEndPoint);

byte[] b=new byte[100];
int k=s.Receive(b);

char cc = ' ';
string test = null;
Console.WriteLine("Recieved...");
for (int i = 0; i < k-1; i++)
{
Console.Write(Convert.ToChar(b[i]));
cc = Convert.ToChar(b[i]);
test += cc.ToString();
}

switch (test)
{
case "1":
break;


}

ASCIIEncoding asen=new ASCIIEncoding();
s.Send(asen.GetBytes("The string was recieved by the server."));
Console.WriteLine("\nSent Acknowledgement");


/* clean up */
goto m;
s.Close();
myList.Stop();
Console.ReadLine();

}
catch (Exception e) {
Console.WriteLine("Error..... " + e.StackTrace);
}
}

}

最佳答案

好的,我找到了解决您问题的方法。

在您发送文本的 C# 服务器中:

ASCIIEncoding asen = new ASCIIEncoding();
s.Send(asen.GetBytes("The string was recieved by the server."));
s.Close();

确保在发送数据后关闭此处的套接字。这就是为什么你的应用程序会挂起。 IT 正在等待来自服务器的更多输入

此外,在您收到的 Java 中对此进行更改

String text = "";
String finalText = "";
while ((text = in.readLine()) != null) {
finalText += text;
}
txt.setText(finalText);

注意您是如何在该循环中执行 2 个 readInputs 的。 while 语句做一个......而设置文本做一个......所以你实际上是在尝试在一个循环中读取 2 行。更改为我上面发布的内容将解决这个问题

关于c# - 如何让 Android 上的客户端监听 C# 上的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6387579/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com