java实现tcp套接字 双向通信

服务端server:

import org.json.simple.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;

public class Main {

    public static void main(String[] args) throws IOException {
        System.out.println("Socketf服务器开始运行。。");
        ServerSocket serverSocket = new ServerSocket(9999);
        while (true){
            Socket socket =serverSocket.accept();
            new Thread(new Server_listen(socket)).start();
            new Thread(new Server_send(socket)).start();
        }
    }
}
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 (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException 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 oos = new ObjectOutputStream(socket.getOutputStream());
            Scanner scanner = new Scanner(System.in);
            while(true){
//                System.out.println("请输入要发送得内容:");
                String string = scanner.nextLine();
                JSONObject object = new JSONObject();
//                object.put("type","chat");
                object.put("msg",string);
                oos.writeObject(object);
                oos.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

客户端client:

import org.json.simple.JSONObject;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.Scanner;

public class Main {

    private static Socket socket;
    private static boolean connection_state = false;
    private static ObjectOutputStream oos;
    public static void main(String[] args) throws IOException {
        System.out.println("客户端运行");
        connect();
        if (connection_state){
            oos = new ObjectOutputStream(socket.getOutputStream());
            new Thread(new Client_listen(socket)).start();
            new Thread(new Client_send(socket,oos)).start();
//            new Thread(new Client_heart(socket,oos)).start();
        }
    }
    private static void connect() throws IOException {
        socket = new Socket("127.0.0.1",9999);
        connection_state = true;
    }
}

class Client_listen implements Runnable{
    private Socket socket;
    Client_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 (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

class Client_send implements Runnable{
    private Socket socket;
    private ObjectOutputStream oos;
    Client_send(Socket socket,ObjectOutputStream oos){
        this.socket=socket;
        this.oos = oos;
    }
    @Override
    public void run() {
        try {
            Scanner scanner = new Scanner(System.in);
            while(true){
                String string = scanner.nextLine();
                JSONObject object = new JSONObject();
//                object.put("type","chat");
                object.put("msg",string);
                oos.writeObject(object);
                oos.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class Client_heart implements Runnable{
    private Socket socket;
    private ObjectOutputStream oos;
    Client_heart(Socket socket,ObjectOutputStream oos ){
        this.socket = socket;
        this.oos = oos;
    }
    @Override
    public void run() {
        try {
            System.out.println("心跳包进程已启动。。。");
            while(true){
                Thread.sleep(5000);
                JSONObject object = new JSONObject();
                object.put("type","heart");
                object.put("msg","心跳包");
                oos.writeObject(object);
                oos.flush();
            }

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


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java实现TCP双向通信,通常涉及套接字编程。以下是一个简单的示例,展示了客户端和服务端如何交互: **服务器端(Server.java)**: ```java import java.io.*; import java.net.*; public class Server { private ServerSocket serverSocket; public static void main(String[] args) throws IOException { Server server = new Server(); server.createServer(); } private void createServer() throws IOException { serverSocket = new ServerSocket(8080); // 建立监听8080端口的服务器 Socket socket = serverSocket.accept(); // 等待客户端连接 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); String inputLine; while ((inputLine = in.readLine()) != null) { System.out.println("Received message from client: " + inputLine); out.println("Message received and acknowledged."); } in.close(); out.close(); socket.close(); } } ``` **客户端(Client.java)**: ```java import java.io.*; import java.net.*; public class Client { public static void main(String[] args) throws IOException { Client client = new Client(); client.connectToServer(); } private void connectToServer() throws IOException { Socket socket = new Socket("localhost", 8080); // 连接到服务器 BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); out.println("Hello, Server!"); // 发送消息 String response = in.readLine(); System.out.println("Server's response: " + response); socket.close(); } } ``` 在这个例子中,客户端向服务器发送一条消息,服务器接收并回应,形成双向通信。如果客户端发送多条消息,服务器会逐条处理并回应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值