King's Studio

Java网络编程

字数统计: 818阅读时长: 3 min
2019/02/20 Share

学习了很久的Java网络编程,因为没有实际操作过,所以很久没有总结,但网络编程毕竟是Java系统学习中很重要的一部分,所以今天还是要来总结一下。

Java网络编程是什么

网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来。java.net包中J2SE的API包含有类和接口,它们提供低层次的通信细节。java.net包中提供了两种常见的网络协议的支持:

TCP

TCP是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称TCP/IP。

Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Server {

public static void main(String[] args) throws IOException {
//1、创建服务器 指定端口
ServerSocket server = new ServerSocket(8888);
//2、接收客户端连接(阻塞式)
while(true) {//死循环,多个客户端建立连接
Socket socket = server.accept();
System.out.println("客户端建立连接");
//3、发送数据
String msg = "欢迎使用";
//输出流

DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.writeUTF(msg);
dos.flush();
}
}
}

Client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Client {

public static void main(String[] args) throws UnknownHostException, IOException {
//1、创建客户端 必须指定服务器+端口
Socket client = new Socket("localhost",8888);
//2、接收数据
/*
BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
String echo = br.readLine();
System.out.println(echo);
*/

DataInputStream dis = new DataInputStream(client.getInputStream());
String echo = dis.readUTF();
System.out.println(echo);
}
}

UDP

UDP是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。

Server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Server {

public static void main(String[] args) throws IOException {
//1、创建服务端+端口
DatagramSocket server = new DatagramSocket(8888);
//2、准备接收容器
byte[] container = new byte[1024];
//3、封装成包
DatagramPacket packet = new DatagramPacket(container, container.length);
//4、接收数据
server.receive(packet);
//5、分析数据
byte[] data = packet.getData();
int len = packet.getLength();
System.out.println(new String(data,0,len));
//6、释放资源
server.close();
}
}

Client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Client {

public static void main(String[] args) throws IOException {
//1、创建客户端+端口
DatagramSocket client = new DatagramSocket(6666);
//2、准备数据
String msg = "udp编程";
byte[] data = msg.getBytes();
//3、打包(发送的地点及端口)
DatagramPacket packet = new DatagramPacket(data, data.length,new InetSocketAddress("localhost",8888));
//4、发送
client.send(packet);
//5、释放资源
client.close();
}
}

手写网络编程服务器实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class Server2 {
private ServerSocket server;

public static void main(String[] args) {
Server2 server = new Server2();
server.start();
}

/*
* 启动方法
*/
public void start() {
try {
server = new ServerSocket(8888);
this.receive();
} catch (IOException e) {
e.printStackTrace();
}

}

//接收客户端
private void receive() {
try {
Socket client = server.accept();

String msg = null;//接收客户端的请求信息

byte[] data = new byte[20480];

int len = client.getInputStream().read(data);
//接收客户端的请求信息
String requestInfo = new String(data, 0, len).trim();
System.out.println(requestInfo);

} catch (IOException e) {
//e.printStackTrace();
}
}

//停止
public void stop() {

}
}

在浏览器地址栏输入localhost:8888,访问我们手写的网络服务器,在控制台会输出我们的访问请求信息。

1
2
3
4
5
6
7
8
9
10
GET / HTTP/1.1
Host: localhost:8888
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: Idea-20bd11df=46fbc264-44e6-4853-8607-3e1f77862060; Webstorm-3ef2b9a6=c40d924f-a2eb-4569-b0d4-4a7a8979a3fe

原文作者:金奇

原文链接:https://www.rossontheway.com/2019/02/20/java回顾9/

发表日期:February 20th 2019, 12:00:00 am

更新日期:March 21st 2019, 9:33:34 am

版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,除特别声明外,转载请注明出处!

CATALOG
  1. 1. Java网络编程是什么
    1. 1.1. TCP
      1. 1.1.1. Server
      2. 1.1.2. Client
    2. 1.2. UDP
      1. 1.2.1. Server
      2. 1.2.2. Client
  2. 2. 手写网络编程服务器实例