怎么用Java Scoket实现双向通信?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
一、网络通信
网络通信,在网络中程序(发送者)与程序(接受者)之间的数据交互。
通信要素①ip + 端口号 ②传输协议
java.net包: 包含了Java用于网络通信所需的类。
ServerSocket类,用于表示网络服务
创建网络服务(创建ServerSocket对象)
//构造器 public ServerSocket(int port) //创建网络服务 ServerSocket server = new ServerSocket(9999);
接收网络请求
//接收网络请求的方法 public Socket accept() //网络服务接收请求(阻塞) Socket socket = server.accept();
Socket类,网络套接字,表示网络连接
发送网络请求 //构造器 public Socket(String ip, int port) //获取网络连接中的输入流 public InputStream getInputStream() //获取网络连接中的输出流 public OuputStream getOutputStream()
二、接受者(Receiver)
代码实现如下:信息的接受者
public class Receiver { public static void main(String[] args) { try { ServerSocket server = new ServerSocket(8888); Socket socket = server.accept(); System.out.println("----程序已经连接++++"); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); PrintWriter pw = new PrintWriter(os); Runnable r1 = new Runnable() { @Override public void run() { while (true) { // 接受信息 String str; try { str = br.readLine(); System.out.println("sender的信息" + str); } catch (IOException e) { e.printStackTrace(); } } } }; Runnable r2 = new Runnable() { @Override public void run() { // 返回信息 while (true) { Scanner scan = new Scanner(System.in); String msg = scan.nextLine(); pw.println(msg); pw.flush(); } } }; Thread t1 = new Thread(r1); Thread t2 = new Thread(r2); t1.start(); t2.start(); } catch (IOException e) { e.printStackTrace(); } } }
三、发送者(Sender)
代码实现如下:信息的发送者
public class Sender { public static void main(String[] args) { try { Socket socket = new Socket("192.168.1.6", 8888); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); PrintWriter pw = new PrintWriter(os); Runnable r = new Runnable() { @Override public void run() { while (true) { // 发送信息 try { Scanner scan = new Scanner(System.in); String msg = scan.nextLine(); pw.println(msg); pw.flush(); } catch (Exception e) { } } } }; Runnable r2 = new Runnable() { @Override public void run() { // 接受发送的信息 while (true) { String str; try { str = br.readLine(); System.out.println("接受者receiver:" + str); } catch (IOException e) { e.printStackTrace(); } } } }; Thread t1 = new Thread(r); Thread t2 = new Thread(r2); t1.start(); t2.start(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
四、案例截图
首先看到开启Receiver,然后开启Sender
开启Sender后----看到Receiver控制台显示连接成功
Sender发送信息
Receiver接受到信息,然后回复
点开Sender控制台,看到回复的信息然后继续回复
双向沟通交流实现
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。