转自https://www.cnblogs.com/liusxg/p/3917624.html
-
Server服务员端调用socket()创建socket
- 通过bind()绑定端口
- 再调用listen()监听端口
- 最后使用accept()阻塞
- 再调用listen()监听端口
- 通过bind()绑定端口
-
Client客户端同样调用socket()创建socket
- 使用connect()来寻找阻塞的Server端建立连接
然后两边开始传输信息
Client
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws Exception {
String readline = null;
String inTemp = null;
// String outTemp = null;
String turnLine = "\n";
final String client = "Client:";
final String server = "Server:";
int port = 4000;
byte ipAddressTemp[] = { 127, 0, 0, 1 };
InetAddress ipAddress = InetAddress.getByAddress(ipAddressTemp);
// 首先直接创建socket,端口号1~1023为系统保存,一般设在1023之外
Socket socket = new Socket(ipAddress, port);
// 创建三个流,系统输入流BufferedReader systemIn,socket输入流BufferedReader
// socketIn,socket输出流PrintWriter socketOut;
BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
BufferedReader socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
while (readline != "bye") {
System.out.println(client);
readline = systemIn.readLine();
// System.out.println(readline);
socketOut.println(readline);
socketOut.flush(); // 赶快刷新使Server收到,也可以换成socketOut.println(readline, ture)
// outTemp = readline;
inTemp = socketIn.readLine();
// System.out.println(client + outTemp);
System.out.println(server + turnLine + inTemp);
}
systemIn.close();
socketIn.close();
socketOut.close();
socket.close();
}
}
Server
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws Exception {
// TODO 自动生成的方法存根
String readline = null;
String inTemp = null;
// String outTemp = null;
String turnLine = "\n";
final String client = "Client:";
final String server = "Server:";
int port = 4000;
// byte ipAddressTemp[] = {127, 0, 0, 1};
// InetAddress ipAddress = InetAddress.getByAddress(ipAddressTemp);
// 首先直接创建serversocket
ServerSocket serverSocket = new ServerSocket(port);
// 调用服务器的accept()进行阻塞(程序会在这等待),当有申请连接时会打开阻塞并返回一个socket
Socket socket = serverSocket.accept();
// 创建三个流,系统输入流BufferedReader systemIn,socket输入流BufferedReader
// socketIn,socket输出流PrintWriter socketOut;
BufferedReader systemIn = new BufferedReader(new InputStreamReader(System.in));
BufferedReader socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
while (readline != "bye") {
inTemp = socketIn.readLine();
System.out.println(client + turnLine + inTemp);
System.out.println(server);
readline = systemIn.readLine();
socketOut.println(readline);
socketOut.flush(); // 赶快刷新使Client收到,也可以换成socketOut.println(readline, ture)
// outTemp = readline;
// System.out.println(server);
}
systemIn.close();
socketIn.close();
socketOut.close();
socket.close();
serverSocket.close();
}
}
流程上需要先启动Server然后再启动Client,否则Client找不到目标,会报错。