java中的serversocket_Java 中使用serversocket通信

1. 创建一个Java项目 TestMyServerSocket.

2. 创建一个包 com.weloglog.main

3. 创建一些使用到的类

程序启动类 MyServerSccket : 用来启动程序, 启动之后创建一个进程, 用来监视本机当前端口

监视本机端口进程类 ServerListener : 用来监视本地端口, 当有连接本机端口时会生成一个聊天类 ChatSocket 并把这个聊天类添加到 聊天管理类(单例类)中 ChatManager

聊天类 ChatSocket : 用来发送消息给所以聊天窗口(除过自己)

聊天管理类 ChatManager : 用来收集管理所有聊天窗口

4. 以下为所有类代码:

MyServerSccket.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.weloglog.main;public classMyServerSccket {public static voidmain(String[] args) {newServerListener().start();

}

}

View Code

ServerListener.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.weloglog.main;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;importjavax.swing.JOptionPane;public class ServerListener extendsThread {int port = 12345;

@Overridepublic voidrun() {try{//端口 : 1 - 65535

ServerSocket serverSocket = newServerSocket(port);while (true) {//阻塞的方法

Socket socket =serverSocket.accept();//建立连接

JOptionPane.showMessageDialog(null, "有客户端连接到本机12345端口");//将Socket传递给线程

ChatSocket cs = newChatSocket(socket);

cs.start();

ChatManager.getChatManager().add(cs);

}

}catch(IOException e) {

e.printStackTrace();

}

}

}

View Code

ChatSocket.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.weloglog.main;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.UnsupportedEncodingException;importjava.net.Socket;public class ChatSocket extendsThread {

Socket socket;publicChatSocket(Socket s){this.socket =s;

}//发送消息

public voidout(String out){try{

socket.getOutputStream().write(out.getBytes("UTF-8"));

System.out.println(out);

}catch(IOException e) {

e.printStackTrace();

}

}

@Overridepublic voidrun() {try{

BufferedReader br= newBufferedReader(newInputStreamReader(

socket.getInputStream(),"UTF-8"));

String line= null;while((line = br.readLine()) != null){

ChatManager.getChatManager().publish(this, line);

}

}catch(UnsupportedEncodingException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}

}

View Code

ChatManager.java

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.weloglog.main;importjava.util.Vector;public classChatManager {//单例类

privateChatManager(){}private static final ChatManager cm = newChatManager();public staticChatManager getChatManager(){returncm;

}//存放聊天进程的容器

Vector vector = new Vector();//添加

public voidadd(ChatSocket cs){

vector.add(cs);

}//遍历发送消息

public voidpublish(ChatSocket cs, String out){for (int i = 0; i < vector.size(); i++) {

ChatSocket csChatSocket=vector.get(i);//把不是自己输出

if (!cs.equals(csChatSocket)) {

csChatSocket.out(out);

}

}

}

}

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值