首先,有一定网络知识基础的人都应该知道在传输层有两个重要协议,那就是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端应用程序采用多线程机制。