Java网络||TCP通信:ServerSocket类和Socket类

TCP 网络通信:

TCP 网络通信是指利用 Socket 编写的通信程序。利用 TCP 协议进行通信的两个应用程序是有主次之分的,一个是服务器程序,一个是客户端程序,两者的功能和编写方法不太一样。

其中 ServerSocket 类表示 Socket 服务器端,Socket 类表示 Socket 客户端,两者之间的交互过程如下:

  1. 服务器端创建一个 ServerSocket(服务器端套接字),调用 accept() 方法等待客户端来连接。
  2. 客户端程序创建一个 Socket,请求与服务器建立连接。
  3. 服务器接收客户的连接请求,同时创建一个新的 Socket 与客户建立连接,服务器继续等待新的请求。

ServerSocket 类

ServerSocket 类是与 Socket 类相对应的用于表示通信双方中的服务器端,用于在服务器上开一个端口,被动地等待数据(使用 accept() 方法)并建立连接进行数据交互。

服务器套接字一次可以与一个套接字连接,如果多台客户端同时提出连接请求,服务器套接字会将请求连接的客户端存入队列中,然后从中取出一个套接字与服务器新建的套接字连接起来。若请求连接大于最大容纳数,则多出的连接请求被拒绝;默认的队列大小是 50。

构造方法 解释
ServerSocket() 无参构造方法
ServerSocket(int port) 创建绑定到特定端口的服务器套接字
ServerSocket(int port,int backlog) 使用指定的 backlog 创建服务器套接字并将其绑定到指定的本地端口
ServerSocket(int port,int backlog,InetAddress bindAddr) 使用指定的端口、监听 backlog 和要绑定到本地的 IP 地址创建服务器

Socket 类


Socket 类表示通信双方中的客户端,用于呼叫远端机器上的一个端口,主动向服务器端发送数据(当连接建立后也能接收数据)。下面简单介绍一下 Socket 类的构造方法和常用方法。

Socket 的构造方法

构造方法 功能
Socket() 无参构造方法
Socket(InetAddress address,int port) 创建一个流套接字并将其连接到指定 IP 地址的指定端口
Soclcet(InetAddress address,int port,InetAddress localAddr,int localPort) 创建一个套接字并将其连接到指定远程地址上的指定远程端口
Socket(String host,int port) 创建一个流套接字并将其连接到指定主机上的指定端口
Socket(String host,int port,InetAddress localAddr,int localPort) 创建一个套接字并将其连接到指定远程地址上的指定远程端口


address 指的是远程地址,port 指的是远程端口,localAddr 指的是要将套接字绑定到的本地地址,localPort 指的是要将套接字绑定到的本地端口。

Socket 的常用方法

  • void bind(SocketAddress bindpoint):将套接字绑定到本地地址。
  • void close():关闭此套接字。
  • void connect(SocketAddress endpoint):将此套接字连接到服务器。
  • InetAddress getInetAddress():返回套接字的连接地址。
  • InetAddress getLocalAddress():获取套接字绑定的本地地址。
  • InputStream getInputStream():返回此套接字的输入流。
  • OutputStream getOutputStream():返回此套接字的输出流。
  • SocketAddress getLocalSocketAddress():返回此套接字绑定的端点地址,如果尚未绑定则返回 null。
  • SocketAddress getRemoteSocketAddress():返回此套接字的连接的端点地址,如果尚未连接则返回 null。
  • int getLoacalPort():返回此套接字绑定的本地端口。
  • intgetPort():返回此套接字连接的远程端口。

网络通信实例化操作:

服务端:

通过服务器向客户端发送一条消息。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Xalead {
    public static void main(String[] args) throws IOException {
        ServerSocket s = null;
        s = new ServerSocket (4508);
        System.out.println ("等待连接");
        Socket ss = s.accept ();//阻塞
        System.out.println ("已经连接");

        InputStream input = ss.getInputStream ();
        OutputStream output = ss.getOutputStream ();

        PrintWriter pw = new PrintWriter (output);
        pw.print ("你好!\n");
        pw.flush ();//刷新
    }
}

编译:

 

客户端:

接收到来自服务器端的消息

import java.io.*;
import java.net.Socket;

public class Client {
    public static void main(String[] args) throws IOException {
        Socket s = new Socket ("127.0.0.1",4508);//连接
        InputStream in = s.getInputStream ();
        OutputStream out = s.getOutputStream ();
        BufferedReader br = new BufferedReader (
                            new InputStreamReader (in)
                            );
        String str = br.readLine ();
        System.out.println (str);

    }
}

编译:

Java网络||TCP通信:ServerSocket类和Socket类_第1张图片

回去看服务端:

这样就建立好连接了!

 

 

 

文字资料参考:ServerSocket类和Socket类

 

你可能感兴趣的:(Java札记)