java中的socket通信
来源:互联网 发布:java rmi属于哪类漏洞 编辑:程序博客网 时间:2024/06/05 12:40
本代码实现的是类似聊天室的效果
主文件:
MyServerSocket.java
package mypackage;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JOptionPane;public class MyServerSocket {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubnew ServerListener().start();//开启监听器,监听器,ServerListener继承于Thread类}}
ServerListener.java:
package mypackage;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JOptionPane;public class ServerListener extends Thread{public void run(){try {ServerSocket serverSocket=new ServerSocket(12345);//创建ServerSocket,使用12345端口while(true){Socket socket=serverSocket.accept();//程序运行到此句时阻塞,知道接收到一个socketJOptionPane.showMessageDialog(null,"有客户端连接到端口12345"); ChatSocket chatsocket=new ChatSocket(socket);//创建一个聊天用的socketchatsocket.start();//开启线程,接收用户输入的信息ChatManager.getChatManager().add(chatsocket);//将创建完毕的socket添加到ChatSocket管理器中}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}ChatSocket.java
package mypackage;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.UnsupportedEncodingException;import java.net.Socket;public class ChatSocket extends Thread {Socket socket;public ChatSocket(Socket socket){this.socket=socket;}public void out(String out){ //显示接收到的信息try {socket.getOutputStream().write(out.getBytes("UTF-8"));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public void run(){ //接收客户端输入的信息try {BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));String line=null;while((line=br.readLine())!=null){ChatManager.getChatManager().publish(this, line);//发送给所有人}br.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
ChatManager.java:
package mypackage;import java.util.Vector;public class ChatManager {private ChatManager() {};private static final ChatManager cm =new ChatManager();public static ChatManager getChatManager(){return cm;}Vector<ChatSocket> vector=new Vector<ChatSocket>();public void add(ChatSocket cs){vector.add(cs);}public void publish(ChatSocket cs,String out){ //将信息打印给Vector中的所有socketfor(int i=0;i<vector.size();i++){ChatSocket csChatSocket=vector.get(i);if(!cs.equals(csChatSocket)){csChatSocket.out(out);}}}}
在win下,运行程序后,打开终端:
输入:telnet localhost 12345 即可发送一个socket给12345端口,
然后重复创建。在任何一个终端中输入信息,其他窗口也会出现同样的信息。
0 0
- Java中的Socket通信
- java中的Socket通信
- java中的socket通信
- Java中的Socket通信
- java中socket通信中的注意事项
- Java中的Socket通信(TCP)
- Java中的Socket通信(UDP)
- Java中的网络编程—Socket通信
- java与C进行socket通信中的通信异常问题
- Unity3D中的Socket通信
- iOS中的socket通信
- Java 基于 TCP/IP 实现 Socket中的多客户端通信
- Java 基于 UDP 实现 Socket中的多客户端通信
- Java 基于 TCP/IP 实现 Socket中的多客户端通信
- Java 基于 UDP 实现 Socket中的多客户端通信
- java - socket通信 客户端
- java socket 通信
- Java Socket 通信
- Ubuntu14.10更换内核(3.16.0-23换成3.17.6 )
- 20个实用的WordPress SQL查询
- 理解互斥量和信号量
- OpenGL入门学习(十)
- cgroup技术研究
- java中的socket通信
- Linq:Select使用示例
- OpenGL入门学习(十一)
- 算法竞赛入门经典习题3-2
- 显示系统中空闲和已使用的内存
- 安装httplib2
- OpenGL入门学习(十二)
- OpenGL入门学习(十三)
- python包setup出错的解决办法