关于解决打开多个文本聊窗口的端口占用问题的若干想法(官话~)
来源:互联网 发布:淘宝客手机模板 编辑:程序博客网 时间:2024/05/23 10:52
最近在整一个仿feiq的聊天的软件的,但是由于网络知识的和各方面的匮乏~问题多多!
该软件不存在任何的服务器进行转发!而直接的端对端的进行udp通信...对所有的文本聊天窗口都设置为8888端口进行接收(也就是说所有的都是发送到对方机子的8888端口上)~
这样暂时就会有2个问题:
1:本来是一个聊天的窗口对应着一个ip,直接到聊天窗口的那个类中进行接收的话,会接收到其他主机发生弄个过来的信息,但是这个问题可以用判断数据的来之的ip来进行区分!
2:当我们要进行多人聊天的时候,需要打开多个俩天窗口,这个端口8888就会被占用了,无法打开多个!
解决的思路,在每个客户端上创建一个用于专门接受所有主机发送过来的信息,并对所有的信息进行甄别、存储,有聊天的窗口对其存储的内容进行获取
下面是今天晚上写的代码:并没有严格的测试!只是思路而已!
package binary.net;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.util.HashMap;import java.util.Iterator;/** * @author 后飞IT * 这个类的功能: * 1、 用于接收其他的主机发送过来的所有的文本的信息 * 2、对所有的所有的信息进行转发 */public class self_Server implements Runnable {/** * map是用于存储进行了文本聊天的窗口,该窗口时用于聊天主机的ip地址进行标识的 */static HashMap<String,String> map=null;/** * 通过这个类方法对可以使得聊天串口得以对map进行注册 * @param ip 利用本机与局域网中通信的机器的ip对聊天的窗口的标识 */public static void insertInfo(String ip){map.put(ip, "");}/** * 通过聊天窗口标识的ip来获取self_Server中有关自己信息 * @param ip * @return */public static String getInfo(String ip){Iterator<String> ite=map.keySet().iterator();String temp="";while(ite.hasNext()){temp=ite.next();System.out.println(temp);if(temp.equals("/"+ip)){break;}}if(temp.equals("")){return "";}else{return map.get(temp);}}/** * 对ip存在于map表中的ip的信息进行存储 * @param ip * @param msg 其他的主机发送过来的信息 */public static void setInfo(String ip,String msg){Iterator<String> ite=map.keySet().iterator();String temp="";while(ite.hasNext()){temp=ite.next();if( ("/"+temp).equals(ip)){map.put(temp, msg);//System.out.println(temp);//System.out.println(map.get(temp));break;}}}/*测试public static void main(String[] args){map.put("127.0.0.1","12");map.put("127.0.0.2","");setInfo("/127.0.0.2","shezhi ");System.out.println(getInfo("127.0.0.2"));}*/@Overridepublic void run() {map=new HashMap<String,String>();DatagramPacket pack = null;DatagramSocket mail_data = null;byte data[] = new byte[8192];try{pack = new DatagramPacket(data, data.length);mail_data = new DatagramSocket(8888);}catch (Exception e) {}//一直获取信息while (true){try{mail_data.receive(pack);int length = pack.getLength();//String message =pack.getAddress().toString()+ new String(pack.getData(), 0, length);//对有在map中存在了的ip地址的信息进行存储,其他抛弃setInfo(pack.getAddress().toString(),new String(pack.getData(), 0, length));}catch (Exception e){e.printStackTrace();System.out.println("接收数据失败!");}}}}
大家如果有什么好的意见,请提出来的!有同样做这个东西的也可以来交流下~
- 关于解决打开多个文本聊窗口的端口占用问题的若干想法(官话~)
- 解决端口占用的问题
- MATLAB启动时打开多个窗口问题的解决
- Oracle占用8080端口问题的解决
- 解决tomcat端口占用的问题
- 解决Tomcat端口占用的问题
- XAMPP端口占用问题的解决
- MAC 下解决端口占用的问题
- 解决pow占用80端口的问题
- 解决tomcat占用8080端口的问题
- Oracle占用8080端口问题的解决
- MAC下解决端口占用的问题
- Tomcat的端口占用问题及解决
- XAMPP apache端口占用问题的解决
- 解决Adb Server ACK error的问题(端口占用)
- 关于Java UDP的端口占用问题
- 解决tomcat 占用8080端口的占用问题
- 关于色彩管理的若干个问题
- IOS项目常用代码
- 平面最近点对问题详解
- UITableView的多个UITextField时,有的被键盘挡住怎么解决
- iOS学习之分段Table View的使用(Grouped样式表格)
- Git SSH Key 生成步骤
- 关于解决打开多个文本聊窗口的端口占用问题的若干想法(官话~)
- UITableView 基本使用方法总结
- Linux 查看系统硬件信息(实例详解)
- UINavigationController
- php实现简单的页面网站模板更换效果
- ios下最简单的正则,RegexKitLite
- shell脚本处理字符串常用方法
- ASP.NET发送电子邮件源码示例
- 一个单例模式的简单例子