java - Java上的Socket连接,指定IP

标签 java sockets ip client-server client

我正在开发一个程序,其中多个客户端需要与远程服务器交互。
我已经在本地测试过了,一切正常(稍后会详细介绍),但我不明白如何设置远程 IP。
我阅读了 Socket 的 API 和 InetAddress 的 API。这是正确的做法吗? Java如何处理IP?不仅仅是像本地主机那样的简单字符串,对吗?
这是我的代码:

客户:

public class Client {

    final String HOST = "localhost";
    final int PORT = 5000;
    Socket sc;
    DataOutputStream message;
    DataInputStream istream;

    public void initClient() {
        try {
            sc = new Socket(HOST, PORT);
            message = new DataOutputStream(sc.getOutputStream());
            message.writeUTF("test");
            sc.close();
        } catch (Exception e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

服务器:

public class Server {

    final int PORT = 5000;
    ServerSocket sc;
    Socket so;
    DataOutputStream ostream;
    String incomingMessage;

    public void initServer() {
        try {
            sc = new ServerSocket(PORT);
        } catch (IOException ex) {
            System.out.println("Error: " + ex.getMessage());
        }

        BufferedReader input;

        while(true){
            try {
                so = new Socket();
                System.out.println("Waiting for clients...");
                so = sc.accept();
                System.out.println("A client has connected.");

                input = new BufferedReader(new InputStreamReader(so.getInputStream()));
                ostream = new DataOutputStream(so.getOutputStream());
                System.out.println("Confirming connection...");
                ostream.writeUTF("Successful connection.");

                incomingMessage = input.readLine();
                System.out.println(incomingMessage);
                sc.close();
            } catch (Exception e) {
                System.out.println("Error: " + e.getMessage());
            }
        }
    }
}

此外,我在本地测试中遇到了一些麻烦。
首先,有时我会得到以下结果:

等待客户...
客户端已连接。
正在确认连接...
错误:软件导致连接中止:接收失败

虽然其他时候它工作得很好。好吧,至少是第一个连接。

最后一个问题:
当我尝试从服务器向客户端发送消息时,程序进入无限循环,需要手动关闭。我将其添加到代码中来执行此操作:

fromServerToClient = new BufferedReader(new InputStreamReader(sc.getInputStream()));  
text = fromServerToClient.readLine();  
System.out.println(text);  

我做得对吗?

谢谢。

最佳答案

而不是使用

String host = "localhost";

你可以使用类似的东西

String host = "www.ibm.com";

String host = "8.8.8.8";

关于java - Java上的Socket连接,指定IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20776988/

相关文章:

Java如何处理一个类型的对象

linux - 如何将名称添加到命名空间?

node.js - 如何使用node.js允许外部访问

c++ - 将结果存储在 C++ 文件中

java - 使用 Geotools Dijkstra 最短路径查找器计算路径长度(以公里为单位的距离)

java - 安装 jRebel 插件后,源文件夹在 Netbeans 项目中不可见?

java - 通过 LAN 唤醒从 Android 手机唤醒笔记本电脑

ios - 如何在特定接口(interface)上接收 UDP 广播数据包?

javascript - 通过socket发送和接收数据 : Node. JS服务器、Java客户端

Node.js HTTP 无法与 Raspberry Pi 上的 Unix Socket 建立连接