Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当Java作为客户端,Android作为服务器时,ServerSocket不工作_Java_Android_Sockets_Serversocket - Fatal编程技术网

当Java作为客户端,Android作为服务器时,ServerSocket不工作

当Java作为客户端,Android作为服务器时,ServerSocket不工作,java,android,sockets,serversocket,Java,Android,Sockets,Serversocket,我想让我的android作为服务器,PC上的Java作为客户端。这可能吗?我试过了,但有一些错误。我从教程中得到了服务器代码 注意:我已将电脑和手机连接到同一路由器上 服务器代码Android: public class Server extends Activity { private ServerSocket serverSocket; Handler updateConversationHandler; Thread serverThread = null;

我想让我的android作为服务器,PC上的Java作为客户端。这可能吗?我试过了,但有一些错误。我从教程中得到了服务器代码

注意:我已将电脑和手机连接到同一路由器上

服务器代码Android:

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)
线程“main”java.net.ConnectException:连接被拒绝:连接 位于java.net.DualStackPlainSocketImpl.connect0(本机方法) 位于java.net.DualStackPlainSocketImpl.socketConnect(未知源) 位于java.net.AbstractPlainSocketImpl.doConnect(未知源) 位于java.net.AbstractPlainSocketImpl.connectToAddress(未知源) 位于java.net.AbstractPlainSocketImpl.connect(未知源) 位于java.net.PlainSocketImpl.connect(未知源) 位于java.net.socksocketimpl.connect(未知源) 位于java.net.Socket.connect(未知源) 位于java.net.Socket.connect(未知源) 位于java.net.Socket。(未知源) 位于java.net.Socket。(未知源) 位于ServerCyb.main(ServerCyb.java:20) 编辑:
我已经在AndroidManifest.xml中包含了所有需要的权限,这可能是android权限问题。检查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"/>

尝试更换
套接字服务器1=新的套接字(“192.168.1.4”,6000)带有

        server1 = new Socket();
        server1.connect(new InetSocketAddress(InetAddress.getByName("192.168.1.4"),6000), 100);
我找到了答案!:)

你需要这个:

ServerSocket server;
String hostname = "yourIpAdress";
server = new ServerSocket();
server.bind(new InetSocketAddress(hostname, port));

logcat中的服务器有什么消息吗?权限问题应该显示在那里,因为套接字创建将失败。没有来自logcat的错误消息。然后我已经包括了正确的权限AndroidManifest.xml添加了一些部分成功的日志记录。验证您的IP地址是否正确。尝试设备上的客户端…我会说您已关闭防病毒程序。它可能会阻止连接。此外,如果您从电话尝试此操作,并且服务器端位于您的PC上,请不要忘记向前移植,否则您的本地主机将是本地的,不是公共的。我已经包含了对AndroidManifest.xml的所有权限。也许您的防火墙正在阻止它。请确保在防火墙设置中允许在该端口上进行进出通信。错误的建议是,这将使客户端而不是服务器,并需要进行其他更改。
ServerSocket server;
String hostname = "yourIpAdress";
server = new ServerSocket();
server.bind(new InetSocketAddress(hostname, port));