博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket实例1
阅读量:7251 次
发布时间:2019-06-29

本文共 3815 字,大约阅读时间需要 12 分钟。

第一个例子创建了一个java工程,用来测试Socket的连接功能,通过浏览器可访问,地址为:127.0.0.1:端口号

 MyServerSocket.java,

package com.jikexueyuan.testmysetversocket.main;public class MyServerSocket {    public static void main(String[] args) {        new ServerListener().start();            }}

 

ServerListener.java

1 package com.jikexueyuan.testmysetversocket.main; 2  3 import java.io.IOException; 4 import java.net.ServerSocket; 5 import java.net.Socket; 6  7 import javax.swing.JOptionPane; 8  9 public class ServerListener extends Thread {10 11     @Override12     public void run() {13         //1-6553514         try {15             ServerSocket serverSocket = new ServerSocket(12345);16             while (true) {17                 //block18                 Socket socket = serverSocket.accept();19                 //建立连接20                 JOptionPane.showMessageDialog(null, "有客户端链接到了本机的12345端口");21                 //将socket传递给新的线程22                 ChatSocket cs = new ChatSocket(socket);23                 cs.start();24                 ChatManager.getChatManager().add(cs);25             }26             27         } catch (IOException e) {28             e.printStackTrace();29         }30     }31 }

 

ChatSocket.java

1 package com.jikexueyuan.testmysetversocket.main; 2  3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.OutputStreamWriter; 8 import java.io.UnsupportedEncodingException; 9 import java.net.Socket;10 11 public class ChatSocket extends Thread {12     13     Socket socket;14     15     public ChatSocket(Socket s){16         this.socket = s;17     }18     19     public void out(String out) {20         try {21             socket.getOutputStream().write((out+"\n").getBytes("UTF-8"));22         } catch (UnsupportedEncodingException e) {23             e.printStackTrace();24         } catch (IOException e) {25             System.out.println("断开了一个客户端链接");26             ChatManager.getChatManager().remove(this);27             e.printStackTrace();28         }29     }30 31     @Override32     public void run() {33         out("你已经连接到本服务器了");34         try {35             BufferedReader br = new BufferedReader(36                     new InputStreamReader(37                             socket.getInputStream(),"UTF-8"));38             String line = null;39             while ((line = br.readLine()) != null) {40                 System.out.println(line);41                 ChatManager.getChatManager().publish(this, line);42             }43             br.close();44             System.out.println("断开了一个客户端链接");45             ChatManager.getChatManager().remove(this);46         } catch (UnsupportedEncodingException e) {47             e.printStackTrace();48         } catch (IOException e) {49             System.out.println("断开了一个客户端链接");50             ChatManager.getChatManager().remove(this);51             e.printStackTrace();52         }53         54     }55 }

 

ChatManager.java

1 package com.jikexueyuan.testmysetversocket.main; 2  3 import java.util.Vector; 4  5 public class ChatManager { 6  7     private ChatManager(){} 8     private static final ChatManager cm = new ChatManager(); 9     public static ChatManager getChatManager() {10         return cm;11     }12     13     Vector
vector = new Vector
();14 15 public void add(ChatSocket cs) {16 vector.add(cs);17 }18 19 public void remove(ChatSocket cs) {20 vector.remove(cs);21 }22 23 public void publish(ChatSocket cs,String out) {24 for (int i = 0; i < vector.size(); i++) {25 ChatSocket csChatSocket = vector.get(i);26 if (!cs.equals(csChatSocket)) {27 csChatSocket.out(out);28 }29 }30 }31 }

打开浏览器后,访问地址得到:

 

转载地址:http://uihbm.baihongyu.com/

你可能感兴趣的文章
I/O模型和Java NIO源码分析
查看>>
第二天-《企业应用架构模式》-组织领域逻辑
查看>>
日志服务与SIEM(如Splunk)集成方案实战
查看>>
解决packet_write_wait: Connection to...: Broken pipe
查看>>
图学ES6-3.变量的解构赋值
查看>>
web3j的maven插件
查看>>
帮你理清React的生命周期
查看>>
堆和堆排序
查看>>
新手也能看懂,消息队列其实很简单
查看>>
全网稀缺的快应用开源项目-熊宝儿歌故事QuickApp
查看>>
【大数据实践】KSQL流处理——如何将多个STREAM输出到一个TOPIC
查看>>
Vue组件通信的几种方式
查看>>
09.Java数据算法
查看>>
git日常使用经验总结
查看>>
ELF文件解析(一):Segment和Section
查看>>
一个由于Function.name造成的兼容性bug
查看>>
比特币钱包隔离认证开发指南
查看>>
《从0到1学习Flink》—— Data Sink 介绍
查看>>
Vue.js 渲染简写样式存在的问题
查看>>
cocos2d-x (js-binding)游戏开发解决方案设计稿
查看>>