ServerSocket 服务端

是运行的服务端的ServerSocket。socket方式是点对点的属于TCP。

建立服务端频骤

  1. 建立端口并指定服务器IP
  2. 使用 accpet 方法接收连接,阻塞式方法
  3. 使用流通信

代码实现

  1. 建立服务器,建立通道对象

  2. 接收数据

  3. 发送数据

  4. 阻塞式的意思是,如果没有连接,就会一直等待。所以在while里面是一直处于等待状态。

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
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SocketServer {
public static void main(String[] args) throws IOException, IOException {
//1.创建服务器套接字
ServerSocket serverSocket = new ServerSocket(8888);
BufferedWriter bf = null;
Socket socket = null;
DataInputStream date = null;

String welcome = "欢迎使用我的宇宙无敌服务器";

while(true){
//2.建立连接,这只是建立连接,并不是接收客户端发来的信息,就像按电话的接听键
socket = serverSocket.accept(); // 阻塞式的接收方式
System.out.println("Server: " + welcome);

//3.逐行写出给客户端
bf = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream() // 从socket中获取数据
));
bf.append(welcome);
bf.newLine(); // 一定要换行,相当于\r\n
bf.flush();

//4.接收客户端发来的信息
date = new DataInputStream(socket.getInputStream());
String message = date.readUTF();
System.out.println(message);

}
}
}

Soket客户端

可以用来连接服务器

连接步骤

  1. 建立连接
  2. 使用I/O 学节流进行交互

代码实现

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

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;


public class SocketClient {
public static void main(String[] args) throws IOException {
//1.建立服务器连接
Socket client = new Socket("localhost", 8888);

//2.获取服务器传来的数据
BufferedReader bf = new BufferedReader(
new InputStreamReader(
client.getInputStream()
));
//阻塞式
String getMessage = bf.readLine();
System.out.println(getMessage);

//3.客户端向服务器发送
DataOutputStream ds = new DataOutputStream(client.getOutputStream());
ds.writeUTF("client: 获取到了服务器连接");
ds.flush();
ds.close();
}
}

socket连接状态