Java后端直接写Socket服务端和客户端
服务端代码如下
import com.alibaba.fastjson.JSONObject;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* @author 86177
* @version 1.0
* @description
* @date 2021/2/22
*/
public class Service {
public static void main(String[] args) {
try {
// socket 服务端
System.out.println("Socket服务器开始运行");
ServerSocket serverSocket = new ServerSocket(9999);
while (true) {
// 等待连接 accept阻塞 后期实际应用时 如果多次请求 客户端未响应 则全部阻塞
Socket socket = serverSocket.accept();
// 接受客户端信息 重新run方法 开启多线程
new Thread(new Server_listen(socket)).start();
// 发送服务端信息
new Thread(new Server_send(socket)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Server_listen implements Runnable {
private Socket socket;
Server_listen(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
while (true) {
System.out.println(ois.readObject());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
class Server_send implements Runnable {
private Socket socket;
Server_send(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
ObjectOutputStream opu = new ObjectOutputStream(socket.getOutputStream());
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入需要传输的数据");
String s = scanner.nextLine();
JSONObject object = new JSONObject();
object.put("msg", s);
opu.writeObject(object);
opu.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端代码如下
package com.nengchuan.aqff.controller;
import com.alibaba.fastjson.JSONObject;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
/**
* @author 86177
* @version 1.0
* @description
* @date 2021/2/22
*/
public class Coline {
private static Socket socket;
private static boolean flag = false;
public static void main(String[] args) {
connect();
if (flag) {
new Thread(new c_listen(socket)).start();
new Thread(new c_send(socket)).start();
}
}
private static void connect() {
try {
socket = new Socket("127.0.0.1", 9999);
flag = true;
} catch (IOException e) {
flag = false;
}
}
static class c_listen implements Runnable {
private Socket socket;
c_listen(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
while (true) {
System.out.println(ois.readObject());
new Thread(new Server_listen(socket)).start();
new Thread(new Server_send(socket)).start();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
static class c_send implements Runnable {
private Socket socket;
c_send(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
ObjectOutputStream opu = new ObjectOutputStream(socket.getOutputStream());
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("请输入需要传输的数据");
String s = scanner.nextLine();
JSONObject object = new JSONObject();
object.put("msg", s);
opu.writeObject(object);
opu.flush();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
我个人的项目只需要发送消息 而不需要读取消息
所以在服务端发送消息的时候 把
ObjectOutputStream 修改成 printStream 打印流了
PrintStream opu = new PrintStream(socket.getOutputStream());
opu.println(new String(remark.getBytes(StandardCharsets.UTF_8)));