概述
效果图
目录结构
服务端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实现客户端和服务端通信(多线程实现全双工通信)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复