科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件如何实现Java无缝socket编程

如何实现Java无缝socket编程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

为什么Java平台能区得如此大的成功呢?它的一个主要原因是因为它从一开始就获得了网络的支持。本文将向大家介绍如何使用Java sockets实现基本的网络编程。

作者:builder.com.cn 2007年5月14日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

大部分客户端请求能进入相同的端口,因此也能进入相同的ServerSocket。客户端的连接请求在端口上进行排队,所以服务器可以继续接受请求;然而,服务器可以通过使用线程同时为它们服务(例如,每个客户端连接对应于一个线程)。这个逻辑经常用在多连接Java服务器应用程序上。看看下面的例子:

while (true) {

    accept a connection ;

    create a thread to deal with the client ;

end while

新线程从客户端读取数据,并将数据写回客户端。当服务器成功地与客户端建立连接之后,服务器端可以使用下面这段代码与客户端通信:

PrintWriter out = new PrintWriter(

                      clientSocket.getOutputStream(), true);

BufferedReader in = new BufferedReader(

                        new InputStreamReader(

                            clientSocket.getInputStream()));

String inputLine, outputLine;

while ((inputLine = in.readLine()) != null) {  

    outputLine = inputLine;

    out.println(outputLine);

    if outputLine.equals("Bye."))

        break;

}

既然这样,服务器将在回复的时候复制所有来到的信息,直到它收到字符串“Bye”。只要服务器与客户端一直在相互通信,服务器就要从socket中读取信息,并将信息写回socket,就这样在服务器和客户端之间来来回回的发送消息。在这之后,服务器将终止所有的流并终止连接。

out.close();

in.close();

clientSocket.close();

serverSocket.close();

客户端

当你开始写客户端程序的时候,服务器应该已经在运行了,并在监听端口等待客户端所发送的连接请求。客户端程序首先要做的就是打开socket使它与运行在主机的服务器和指定的端口进行连接。

import java.io.*;

import java.net.*;

theSocket = new Socket("hostname.example.com", 4444);

out = new PrintWriter(theSocket.getOutputStream(), true);

in = new BufferedReader(new InputStreamReader(

                            theSocket.getInputStream()));

当你运行这个程序的时候,在Socket构造器中将主机名改成你所在的网络中的机器名。这个计算机是你运行服务器应用程序的地方。当使用socket进行通信时,这个程序也要指定端口号为4444。

这是一个远程端口号(例如:根据服务器端的端口数量选择),它也是服务器正在监听的端口。客户端的socket一定要是未被占用的任意端口(例如,在客户端计算机上的某个端口)。

下面是while循环,这个循环实现了客户端与服务器之间的通信。客户端应用程序将从键盘上读取输入信息(或者标准输入),同时也将这些信息发送给服务器,所以服务器将返回同样的字符串。

BufferedReader stdIn = new BufferedReader(

                                   new InputStreamReader(System.in));

String userInput;

while ((userInput = stdIn.readLine()) != null) {

      if (fromServer.equals("Bye."))

            break;

      out.println(userInput);

      System.out.println("echo: " + in.readLine());

}

注意,当服务器说“Bye”的时候,客户端应该终止连接。为了实现这个目的,在“Bye”传输到服务器并返回之后,你需要在客户端说同样的字符串。客户端必须关闭所有的流和连接。

out.close();

in.close();

stdIn.close();

theSocket.close();

结论

Java.net包为网络编程提供了强大且灵活的组织结构。如果你想了解这个包中所提供的类的话,我建议你多引用这个包。

责任编辑:德东

查看本文国际来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章