我是靠谱客的博主 机智蜜蜂,最近开发中收集的这篇文章主要介绍Java中Socket实现客户端和服务端通信(多线程实现全双工通信),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

效果图

在这里插入图片描述
在这里插入图片描述

目录结构

在这里插入图片描述

服务端Server
package server;

import thread.SocketReader;
import thread.SocketWrite;

import java.io.InputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
    public static void main(String[] args) throws Exception{
        PrintWriter out=null;
        Scanner get = null;
        ServerSocket server=new ServerSocket(8888);
        System.out.println("服务器正在运行,等待客户端连接!");
        while (true){

            Socket client=new Socket();
            client=server.accept();
            System.out.println(client.getInetAddress()+" 已成功连接到此台服务器上。");

            out = new PrintWriter(client.getOutputStream());
            get = new Scanner(client.getInputStream());

            new SocketWrite(out).start();
            new SocketReader(get).start();

        }
    }
}
客户端Client
package client;

import thread.SocketReader;
import thread.SocketWrite;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static void main(String[] args) throws Exception{
        PrintWriter out=null;
        Scanner get = null;
        Socket client=new Socket("127.0.0.1",8888);
        get = new Scanner(client.getInputStream());
        out = new PrintWriter(client.getOutputStream());
        new SocketReader(get).start();
            new SocketWrite(out).start();

    }
}

写入消息SocketWriter
package thread;
import java.io.PrintWriter;
import java.util.Scanner;

public class SocketWrite extends Thread{

    private Scanner scanner;
    private PrintWriter out;
    private Scanner get_key = null;
    public SocketWrite(PrintWriter out){
        this.out=out;
    }
    public void  run(){
        out.println("已成功连接到远程服务器!");
        out.flush();//将缓冲流中的数据全部输出
        while(true){
            try{
                get_key = new Scanner(System.in);
                String msg=get_key .nextLine();
                out.println(msg);
                out.flush();
            //    System.out.println("请输入消息:");
            }catch(Exception e){
                System.out.println("连接已断开!");
                return;
            }
        }
    }
}

读取消息SocketReader
package thread;
import java.io.ByteArrayOutputStream;
import java.util.Scanner;

public class SocketReader extends Thread{
    private Scanner get;
    public SocketReader(Scanner get){
        this.get=get;
    }

    public void  run(){
        while(true){

            try{
                while(true){
                    System.out.println("收到对端消息:"+get.nextLine());
                  //  System.out.print("输入消息:");

                }
            }catch(Exception e){
                System.out.println("连接已中断");
                return;
            }
        }
    }
}

Socket实现客户端和服务端持续通信;

1.单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播。

2.半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。

3.全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,举例:电话通信。

最后

以上就是机智蜜蜂为你收集整理的Java中Socket实现客户端和服务端通信(多线程实现全双工通信)的全部内容,希望文章能够帮你解决Java中Socket实现客户端和服务端通信(多线程实现全双工通信)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部