[英]ServerSocket not working when Java as Client and Android as server
我想将我的 android 作为服务器,将 PC 上的 Java 作为客户端。这可能吗?我试过但有些错误。我从教程中得到了服务器代码。
注意:我已经在同一路由器上连接了我的电脑和手机。
服务器代码安卓:
public class Server extends Activity {
private ServerSocket serverSocket;
Handler updateConversationHandler;
Thread serverThread = null;
private TextView text;
public static final int SERVERPORT = 6000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (TextView) findViewById(R.id.text2);
updateConversationHandler = new Handler();
this.serverThread = new Thread(new ServerThread());
this.serverThread.start();
}
@Override
protected void onStop() {
super.onStop();
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
class ServerThread implements Runnable {
public void run() {
Socket socket = null;
try {
serverSocket = new ServerSocket(SERVERPORT);
} catch (IOException e) {
e.printStackTrace();
}
while (!Thread.currentThread().isInterrupted()) {
try {
socket = serverSocket.accept();
CommunicationThread commThread = new CommunicationThread(socket);
new Thread(commThread).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class CommunicationThread implements Runnable {
private Socket clientSocket;
private BufferedReader input;
public CommunicationThread(Socket clientSocket) {
this.clientSocket = clientSocket;
try {
this.input = new BufferedReader(new InputStreamReader(this.clientSocket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
String read = input.readLine();
updateConversationHandler.post(new updateUIThread(read));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class updateUIThread implements Runnable {
private String msg;
public updateUIThread(String str) {
this.msg = str;
}
@Override
public void run() {
text.setText(text.getText().toString()+"Client Says: "+ msg + "\n");
}
}
}
Java客户端代码:
public class ServerCyb {
public static void main(String[]arg) throws Exception
{
Socket server1=new Socket("192.168.1.4", 6000);
OutputStream e=server1.getOutputStream();
PrintStream ps=new PrintStream(e);
ps.println("Test");
server1.close();
}
}
客户端错误:
Exception in thread "main" java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at ServerCyb.main(ServerCyb.java:20)
编辑:我已经在 AndroidManifest.xml 中包含了所有需要的权限
可能是安卓权限问题。 检查此权限是否存在于您的 AndroidManifest.xml 文件中:
<uses-permission android:name="android.permission.INTERNET" />
我认为 AndroidManifest.xml 的权限是 -
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
尝试更换Socket server1=new Socket("192.168.1.4", 6000);
与
server1 = new Socket();
server1.connect(new InetSocketAddress(InetAddress.getByName("192.168.1.4"),6000), 100);
我找到了答案! :)
ServerSocket server;
try{
String hostname = "yourIpAdress";
server = new ServerSocket();
server.bind(new InetSocketAddress(hostname, port)); //you need this
}catch (Exception e){
e.printStackTrace();
}
while(true){
try{
Socket client = server.accept();
DataInputStream input = new DataInputStream(client.getInputStream());
String messsage = input.readUTF();
DataOutputStream output = new DataOutputStream(client.getOutputStream());
output.writeUTF("Connected!");
client.close();
} catch (Exception e){
e.printStackTrace();
}
}
你需要这个:
ServerSocket server;
String hostname = "yourIpAdress";
server = new ServerSocket();
server.bind(new InetSocketAddress(hostname, port));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.