java Socket通信,客户端与服务端相互发消息
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java Socket通信,客户端与服务端相互发消息,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5148字,纯文字阅读大概需要8分钟。
内容图文
![java Socket通信,客户端与服务端相互发消息](/upload/InfoBanner/zyjiaocheng/1261/fb1d8cec6e4c4c0d9f9f301da9e3c26e.jpg)
![技术分享图片](/upload/getfiles/default/2022/10/30/20221030095754237.jpg)
2.Socket连接
![技术分享图片](/upload/getfiles/default/2022/10/30/20221030095754506.jpg)
Socket与http的区别可以看下这个:
https://www.cnblogs.com/meier1205/p/5971313.html
还有搜索:http下午茶
![技术分享图片](/upload/getfiles/default/2022/10/30/20221030095754763.jpg)
客户端和服务端分别通过俩个线程来完成发送消息和接受消息,此前需要等待客户端与服务器端建立连接,这个java程序都帮你写好了,接收后就可以发消息了:
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; public class Server_Test extends Thread{ ServerSocket server = null; Socket socket = null; public Server_Test(int port) { try { server = new ServerSocket(port); } catch (IOException e) { e.printStackTrace(); } } @Override publicvoid run(){ super.run(); try{ System.out.println("wait client connect..."); socket = server.accept(); new sendMessThread().start();//连接并返回socket后,再启用发送消息线程 System.out.println(socket.getInetAddress().getHostAddress()+"SUCCESS TO CONNECT..."); InputStream in = socket.getInputStream(); int len = 0; byte[] buf = newbyte[1024]; while ((len=in.read(buf))!=-1){ System.out.println("client saying: "+new String(buf,0,len)); } }catch (IOException e){ e.printStackTrace(); } } class sendMessThread extends Thread{ @Override publicvoid run(){ super.run(); Scanner scanner=null; OutputStream out = null; try{ if(socket != null){ scanner = new Scanner(System.in); out = socket.getOutputStream(); String in = ""; do { in = scanner.next(); out.write(("server saying: "+in).getBytes()); out.flush();//清空缓存区的内容 }while (!in.equals("q")); scanner.close(); try{ out.close(); }catch (IOException e){ e.printStackTrace(); } } }catch (IOException e) { e.printStackTrace(); } } } //函数入口publicstaticvoid main(String[] args) { Server_Test server = new Server_Test(1234); server.start(); } }
客户端代码
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Client extends Thread { //定义一个Socket对象 Socket socket = null; public Client(String host, int port) { try { //需要服务器的IP地址和端口号,才能获得正确的Socket对象 socket = new Socket(host, port); } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override publicvoid run() { //客户端一连接就可以写数据个服务器了new sendMessThread().start(); super.run(); try { // 读Sock里面的数据 InputStream s = socket.getInputStream(); byte[] buf = newbyte[1024]; int len = 0; while ((len = s.read(buf)) != -1) { System.out.println(new String(buf, 0, len)); } } catch (IOException e) { e.printStackTrace(); } } //往Socket里面写数据,需要新开一个线程class sendMessThread extends Thread{ @Override publicvoid run() { super.run(); //写操作 Scanner scanner=null; OutputStream os= null; try { scanner=new Scanner(System.in); os= socket.getOutputStream(); String in=""; do { in=scanner.next(); os.write((""+in).getBytes()); os.flush(); } while (!in.equals("bye")); } catch (IOException e) { e.printStackTrace(); } scanner.close(); try { os.close(); } catch (IOException e) { e.printStackTrace(); } } } //函数入口publicstaticvoid main(String[] args) { //需要服务器的正确的IP地址和端口号 Client clientTest=new Client("127.0.0.1", 1234); clientTest.start(); } }
自己改写的,主要变化在于不用那么费事的读写
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.Socket; import java.util.ArrayList; public class LuClient extends Thread { //定义一个Socket对象 Socket socket = null; public LuClient(String host,int post){ Exception q=null; while(true){ try { socket = new Socket(host,post); } catch (Exception e) { q=e; }finally{ if(q==null) break; elsecontinue; } } } @Override publicvoid run() { //客户端一连接就可以写数据个服务器了 //new sendMessThread().start();super.run(); // 读Sock里面的数据try { InputStream is=socket.getInputStream(); InputStreamReader isr=new InputStreamReader(is); BufferedReader br=new BufferedReader(isr); String message=null; while((message=br.readLine())!=null) { if(message.equals("kaishichongxinguihua")) { new sendMessThread().start(); } } } catch (IOException e) { e.printStackTrace(); } } //往Socket里面写数据,需要新开一个线程class sendMessThread extends Thread{ @Override publicvoid run() { super.run(); //写操作 ArrayList<String> array=new ArrayList<String>(); int N = 1000; int[][] Graph = { { 0, 1, 1, N, N, 1, N, N, N }, { 1, 0, N, N, N, N, 1, N, N }, { 1, N, 0, 1, 1, N, N, N, N }, { N, N, 1, 0, N, N, N, N, N }, { N, N, 1, N, 0, N, N, 1, N }, { 1, N, N, N, N, 0, N, N, N }, { N, 1, N, N, N, N, 0, 1, N }, { N, N, N, N, 1, N, 1, 0, 1 }, { N, N, N, N, N, N, N, 1, 0 } }; array=Dijkstra.dijkstra(0, Graph,8); try{ OutputStream out= socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(out); PrintWriter pw = new PrintWriter(osw, true); pw.println("chongxinguihuahaole"); }catch(Exception e){ //e.printStackTrace(); } } } //函数入口publicstaticvoid main(String[] args) { //需要服务器的正确的IP地址和端口号 LuClient clientTest=new LuClient("192.168.31.126",8090); clientTest.start(); } }
原文:https://www.cnblogs.com/manmanchanglu/p/12081625.html
内容总结
以上是互联网集市为您收集整理的java Socket通信,客户端与服务端相互发消息全部内容,希望文章能够帮你解决java Socket通信,客户端与服务端相互发消息所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。