首先,有一定网络知识基础的人都应该知道在传输层有两个重要协议,那就是TCP(传输控制协议)和UDP(用户数据报协议)。
TCP:一种基于连接的协议,为两个计算机之间提供了点到点的可靠数据流。
UDP:不是基于连接的,从一个计算机向另一个计算机发送独立的数据报,并且不保证数据报以正确的顺序到达目的主机,提供不可靠传输。但是UDP可以减少额外的开销,提高数据的传输速率。

Internet上传输的数据都是带有标识目的主机与端口号的地址信息。

java在java.net包中提供了ServerSocket和Socket进行TCP通信。

Java的有连接通信采用流式I/O模式。

Socket是两个进程间通信链的端点,每个Socket有两个流:一个输入流和一个输出流。只要向Socket的输出流写,一个进程就可以通过网络连接向其他进程发送数据;同样,通过读Socket的输入流,就可以读取传输来的数据。

有连接的通信需要四个步骤:
(1)创建Socket,建立连接。
(2)打开连接到Socket的输入、输出流。
(3)按照一定的协议对Socket进行读写操作。
(4)关闭Socket。


Server端代码:

import java.io.*;
import java.net.*;
public class Server {
    public static void main(String[] args) throws Exception {
        ServerSocket server = null;
        Socket client = null;
        server = new ServerSocket(8888);
        client = server.accept();
        InputStreamReader input = new InputStreamReader(client.getInputStream());
        BufferedReader buf = new BufferedReader(input);
        System.out.println(buf.readLine());
        input.close();
        buf.close();
        client.close();
        server.close();

    }

}

Client端代码:

import java.io.*;
import java.net.*;
public class Client {
    public static void main(String[] args) throws Exception {
        Socket client  = new Socket("127.0.0.1",8888);
        PrintWriter out = new PrintWriter(client.getOutputStream());
        BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
         String s;
         s=sin.readLine();
         out.print(s);
         out.flush();
         sin.close();
         out.close();
         client.close();

    }

}

注意:
多Client对Server并发访问,这种访问模式的实现思想是Server端应用程序采用多线程机制。