Java Socket

1 什么是Java Socket编程

Java Socket编程用于在不同JRE上运行的应用程序之间的通信。

Java Socket编程可以是面向连接的或无连接的。

Socket和ServerSocket类用于面向连接的Socket编程,DatagramSocket和DatagramPacket类用于无连接Socket编程。

Socket编程中的客户端必须知道两个信息:

  • 服务短的IP地址
  • 服务端端口号

要完成Socket编程,我们需要使用两个类:Socket和ServerSocket。

Socket类:用于通信客户端和服务器。通过此类,我们可以读写消息。

ServerSocket类:在服务器端使用。ServerSocket类的accept() 方法将阻止控制台,直到客户端连接为止。客户端成功连接后,它将在服务器端返回Socket的实例。

2 Java Socket类

Socket只是机器之间通信的端点。Socket类可用于创建Socket。

2.1 Java Socket类的方法

方法 描述
public InputStream getInputStream() 返回与Socket连接的InputStream。
public OutputStream getOutputStream() 返回与Socket连接的OutputStream。
public synchronized void close() 关闭Socket

3 Java ServerSocket类

ServerSocket类可用于创建服务端的Socket。该对象用于与客户端建立通信。

3.1 Java ServerSocket类的方法

方法 描述
public Socket accept() 返回Socket,并在服务器和客户端之间建立连接。
public synchronized void close() 关闭ServerSocket。

4 Java Socket编程的例子

在此示例中,客户端将首先写入内容到服务器,然后服务器将接收并打印文本。然后服务器将输出内容到客户端,客户端将接收并打印文本。

4.1 服务端

MyServer.java:

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 *  Java Socket编程(服务端)
 */
import java.net.*;
import java.io.*;

class MyServer{

    public static void main(String args[])throws Exception{
        ServerSocket ss=new ServerSocket(3333);
        Socket s=ss.accept();
        DataInputStream din=new DataInputStream(s.getInputStream());
        DataOutputStream dout=new DataOutputStream(s.getOutputStream());
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        String str="",str2="";
        while(!str.equals("stop")){
            str=din.readUTF();
            System.out.println("client says: "+str);
            str2=br.readLine();
            dout.writeUTF(str2);
            dout.flush();
        }
        din.close();
        s.close();
        ss.close();
    }
}

4.2 客户端

MyClient.java:

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 *  Java Socket编程(客户端)
 */
import java.net.*;
import java.io.*;

public class MyClient{

    public static void main(String args[])throws Exception{
        Socket s=new Socket("localhost",3333);
        DataInputStream din=new DataInputStream(s.getInputStream());
        DataOutputStream dout=new DataOutputStream(s.getOutputStream());
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        String str="",str2="";
        while(!str.equals("stop")){
            str=br.readLine();
            dout.writeUTF(str);
            dout.flush();
            str2=din.readUTF();
            System.out.println("Server says: "+str2);
        }

        dout.close();
        s.close();
    }
}

4.3 效果演示

1)先启动服务端,再启动客户端

2)再客户端输入内容,然后按回车

3)切换到服务端界面,可以看到客户端传递的内容

4)接着,在服务端再输入内容,按回车

5)切换到客户端,也可以看到服务端传递过来的内容

推荐好课