当前位置: 首页 > 面试题库 >

是否可以在同一台计算机上运行套接字服务器和套接字客户端?

韩喜
2023-03-14
问题内容

在Java中,可以创建套接字服务器和套接字客户端,是否可以运行套接字服务器的实例以及从同一台计算机上的套接字服务器接收数据的套接字/服务器客户端?

例如,套接字服务器在端口60010上运行,套接字客户端在通过套接字连接到该端口的同一台计算机上运行,​​还是我需要一台新计算机并将其添加到网络中?如果它在TCP
/ IP层上运行时具有唯一的IP地址和端口号。


问题答案:

这是一个简单的可运行示例,可以帮助您入门。它开始两个线程,一个以a开头,一个ServerSocket建立Socket连接。一个连续发送字符串,另一个连续打印字符串。

您应该可以直接按原样运行此类。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketTest {
    public static void main(String[] args) throws IOException {

        startServer();
        startSender();
    }

    public static void startSender() {
        (new Thread() {
            @Override
            public void run() {
                try {
                    Socket s = new Socket("localhost", 60010);
                    BufferedWriter out = new BufferedWriter(
                            new OutputStreamWriter(s.getOutputStream()));

                    while (true) {
                        out.write("Hello World!");
                        out.newLine();
                        out.flush();

                        Thread.sleep(200);
                    }

                } catch (UnknownHostException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    public static void startServer() {
        (new Thread() {
            @Override
            public void run() {
                ServerSocket ss;
                try {
                    ss = new ServerSocket(60010);

                    Socket s = ss.accept();

                    BufferedReader in = new BufferedReader(
                            new InputStreamReader(s.getInputStream()));
                    String line = null;
                    while ((line = in.readLine()) != null) {
                        System.out.println(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }
}


 类似资料:
  • 问题内容: 我在两个Java应用程序之间建立了一个套接字TCP连接。当一侧关闭插槽时,另一侧保持打开状态。但我希望将其关闭。而且我也迫不及待想看看它是否可用,然后关闭它。我想要某种方式从一侧完全关闭它。我能做什么? 问题答案: TCP不能像这样工作。操作系统将不会释放资源,即文件描述符以及端口,直到应用程序显式关闭套接字或死掉,即使TCP堆栈知道另一端已将其关闭。从对等方收到FIN后,从内核到用户

  • 我试图用java实现一个客户端服务器,在这里我读取客户端中的输入并在服务器中执行UperCase,然后返回客户端并打印UperCase。我使用ObjectOutputStream和ObjectInputStream进行读写,但是当我在客户机中键入一个msg时,程序会显示以下错误: Digite uma msg casa java.io.eofexception位于java.io.datainput

  • 我对套接字有点陌生,我正在尝试编写一个程序,在这个程序中,我基本上可以从客户端程序向服务器程序发送一些简单的请求。现在我只想在客户端有1或2个选项供用户选择。例如,如果用户在客户端选择“选项1”,那么服务器会返回一条消息“您选择选项1”,以此类推,但我不知道如何读取服务器上从客户端发送的输入。 客户代码: 服务器代码: 我需要在Clinet中使用两个不同的BufferedReader吗?一个用于用

  • 正在编写一个服务器,使用Java套接字的客户端聊天程序。这是我的服务器套接字类的代码。 客户端能够建立连接并向服务器发送消息。服务器也可以接收客户端发送的消息。问题是当消息从服务器发送时,客户端没有收到消息。这是我的客户端套接字代码。

  • 我编写了一个服务器/客户机应用程序,首先在本地运行,然后在Internet上运行。因此,我将路由器配置为接受端口xxxx上的数据,并将其转发到我的机器上,在那里我的服务器运行,并接受来自客户端套接字的连接。所以一切都运行得很好,客户端可以在那里互相发送消息。所以现在我的问题是,服务器怎么可能发送数据到其他网络中的客户端,在那里端口转发没有被激活,但当我手动尝试它时,它不起作用。 我已经试着搜索了T

  • 真的需要你帮忙。 我的项目是通过电缆连接两台PC机,并使用tcp套接字将客户端文本框形式的字符串发送到服务器。问题是ATI只能发送一个字符串,然后连接就会关闭。 注意:某个端口上的连接将在表单加载中建立并成功。