关于Socket服务器与客户端双向通信时碰到的一个…
2020-03-08 16:01:39来源:博客园 阅读 ()
关于Socket服务器与客户端双向通信时碰到的一个坑
学习Socket时,
想实现一个读写分离,能够实时接收和发送消息的socket,却一直发送消息出去却不能打印出来。
客户端发送消息出去后。
客户端却不能打印出消息,客户端也不能打印出消息。
一直冥思苦想,一直到不到问题所在。
直到
发现 PrintWriter将 write 方法 改为 println后成功打印出消息。
最后 附上源码
客户端:
1 package my.socket; 2 3 import java.io.*; 4 import java.net.Socket; 5 6 public class SocketClient { 7 8 public static void main(String[] args) throws IOException { 9 Socket socket = new Socket("localhost",55532); 10 11 ReadSocketThread readSocketThread = new ReadSocketThread(socket); 12 readSocketThread.start(); 13 14 WriteSocketThread writeSocketThread = new WriteSocketThread(socket); 15 writeSocketThread.start(); 16 17 18 19 } 20 }
服务端:
1 package my.socket; 2 3 import java.io.*; 4 import java.net.ServerSocket; 5 import java.net.Socket; 6 7 public class SocketService { 8 9 public static void main(String[] args) throws IOException { 10 11 ServerSocket serverSocket = new ServerSocket(55532); 12 13 System.out.println("ServiceSocket已启动,等待Client连接"); 14 15 Socket socket = serverSocket.accept(); 16 17 WriteSocketThread writeSocketThread = new WriteSocketThread(socket); 18 writeSocketThread.start(); 19 ReadSocketThread readSocketThread = new ReadSocketThread(socket); 20 readSocketThread.start(); 21 22 } 23 24 }
消息写入线程:
1 package my.socket; 2 3 import java.io.IOException; 4 import java.io.OutputStream; 5 import java.io.PrintWriter; 6 import java.net.Socket; 7 import java.util.Scanner; 8 9 public class WriteSocketThread extends Thread { 10 11 private Socket socket; 12 private OutputStream os; 13 private PrintWriter pw; 14 15 public WriteSocketThread(Socket socket){ 16 this.socket = socket; 17 try { 18 this.os = socket.getOutputStream(); 19 } catch (IOException e) { 20 e.printStackTrace(); 21 } 22 this.pw = new PrintWriter(os); 23 } 24 25 @Override 26 public void run() { 27 28 pw.flush(); 29 while (true) { 30 Scanner scanner = new Scanner(System.in); 31 pw.println(scanner.nextLine()); 32 pw.flush(); 33 } 34 35 } 36 }
消息读取线程:
1 package my.socket; 2 3 4 import java.io.BufferedReader; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.InputStreamReader; 8 import java.net.Socket; 9 import java.util.Scanner; 10 11 public class ReadSocketThread extends Thread { 12 13 private Socket socket; 14 15 private Scanner scanner; 16 17 18 public ReadSocketThread(Socket socket) throws IOException { 19 this.socket = socket; 20 this.scanner = new Scanner(socket.getInputStream()); 21 } 22 23 @Override 24 public void run() { 25 while(true){ 26 try { 27 System.out.println(scanner.nextLine()); 28 29 } catch (Exception e) { 30 e.printStackTrace(); 31 return; 32 } 33 } 34 } 35 }
参考链接:https://blog.csdn.net/paullinjie/article/details/80577155
原文链接:https://www.cnblogs.com/Ye-ye/p/12445376.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Spring Boot 开发集成 WebSocket,实现私有即时通信系统 2020-05-24
- 怎么自学JAVA开发? 2020-05-22
- 简版在线聊天Websocket 2020-05-19
- 关于序列化的 10 几个问题,你顶得住不?.md 2020-05-19
- 服务器软件大扫盲 2020-05-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash