用java的Udp写聊天程序,为什么不能实现一个端口号同时向两个端口号发送消息?不知如何实现,请高手解答? java UDP 实现多人聊天时 端口被占用怎么解决?

java \u600e\u4e48\u5b9e\u73b0\u4e0d\u6307\u5b9a\u7aef\u53e3\u53f7\u7684UDP\u901a\u4fe1

\u89e3\u51b3\u4e86\u6ca1\u6709\uff1f\u6ca1\u6709\u5c31\u7ed9\u4e2a\u7b80\u5355\u7684\u7b54\u6848\u7ed9\u4f60\u53c2\u8003\u54c8\u54c8\uff08\u8bb0\u5f97\u7ed9\u5206\u54e6\uff09\uff1a \u601d\u60f3\u5c31\u662f\u4f60\u60f3\u7684\u90a3\u6837\u7528\u968f\u673a\u7aef\u53e3\u7684\u65b9\u6848\uff1a\uff08\u7531\u4e8e\u8fd9\u4e2a\u7aef\u53e3\u8981\u6c42\u662f1024\u4ee5\u4e0a\u7684\u54c8\uff09\u5728\u767b\u5f55\u9875\u9762\uff08LoginInterface.java\uff09\u52a0\u4e0a\u8fd9\u4e2a\u51fd\u6570\uff1apublic int getrandomport() {
int port = 0;
Random rm = new Random();
int j = 0;
for (i = 0; i < 10; i++) {
j = rm.nextInt(20000);
if (j > 1111) {
port = j;
}
}
return port;
} \u5c06\u8fd9\u4e2a\u51fd\u6570\u7684\u8fd4\u56de\u503c\u7528\u4e00\u4e2a\u9759\u6001\u53d8\u91cf\u4fdd\u5b58\u8d77\uff0c\u4ee5\u5907\u6211\u4eec\u5728\u65e5\u540eUDPchat.java\u4e0a\u4f7f\u7528\uff0c\u540c\u65f6\u6211\u4eec\u5c06\u5176\u653e\u5165\u5230\u7528\u6237\u767b\u5f55\u65f6\u7684USer\u8868\u4e2dport\u5217\u4e0b\u3002 ...................................port =String.valueOf(getrandomport());
String updatesql = "update user set status='" + status + "',tmpip='" + tmpip + "',tmpport='" + port + "'where usr_id='" + usr_id + "' ";
st.executeUpdate(updatesql);.................................. \u5728UDPchat\u9875\u9762\u7684\u6784\u9020\u65b9\u6cd5\u4e2dnew \u4ee5\u4e2athread\uff1a\u7528\u6765\u63a5\u6536\u522b\u4eba\u53d1\u6765\u7684\u6570\u636e\u3002\u5176\u76d1\u542c\u7aef\u53e3\u4e3a\u81ea\u5df1\u767b\u9646\u65f6\u6240\u4ea7\u751f\u7684\u90a3\u4e2a\u968f\u673a\u7aef\u53e3new Thread() {// receive data
public void run() {
DatagramSocket ds = null;
try {
int acceptport = Integer.parseInt(LoginInterface.port);
ds = new DatagramSocket(acceptport);
} catch (Exception e1) {
e1.printStackTrace();
}
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
while (true) {
try {
ds.receive(dp);
String ip = new String(dp.getAddress().getHostAddress());
String port = String.valueOf(dp.getPort());
String str = new String(dp.getData());
String sum = "From: " + ip + " Port:" + port
+ " receive data: " + str;
receives.add(sum, 0);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}.start(); \u53e6\u5916\u6784\u9020\u4e00\u4e2asend \u65b9\u6cd5\u7528\u6765\u53d1\u9001\u81ea\u5df1\u7684\u6d88\u606f\uff1a\u90e8\u5206\u4ee3\u7801\u5982\u4e0b\uff1a.............................try {
// send data
if (sends.getText().equals("")) {
JOptionPane.showMessageDialog(null, "\u8f93\u5165\u5185\u5bb9\u4e0d\u80fd\u4e3a\u7a7a");
} else {
int port = Integer.parseInt(MainInterface.port);
byte[] buf = sends.getText().getBytes();
InetAddress address = InetAddress.getByName(MainInterface.ip);
DatagramPacket dp = new DatagramPacket(buf, buf.length,
address, port);// destinate port
ds.send(dp);
receives.add("\u6211\u8bf4: " + sends.getText(), 0);
sends.setText("");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
ds.close();
}................................\u6b64\u5904\u7684MainInterface.ip\u548cMainInterface.port\u662f\u5f53\u6211\u4eec\u53cc\u51fb\u9762\u677f\u4e0a\u7684\u67d0\u4e2a\u6b32\u548c\u4ed6\u804a\u5929\u7684\u7528\u6237\uff08\u6839\u636e\u597d\u53cb\u540d\u5b57\u4ece\u6570\u636e\u5e93\u4e2d\u53d6\u51fa\u7684\u597d\u53cb\u7684ip \u548c\u4ed6\u673a\u5b50\u6240\u76d1\u542c\u7684\u7aef\u53e3\u53f7\uff09 \u5b9e\u9a8c\u8fc7\u4e86\uff0c\u6ca1\u6709\u95ee\u9898\u4e86\u54c8\u3002

\u53ef\u4ee5\u5171\u7528\u4e00\u4e2a\u7aef\u53e3\u554a\uff0c\u53ea\u8981\u5728\u6570\u636e\u5305\u4e2d\u6307\u660e\u662f\u53d1\u7ed9\u54ea\u4e2a\u7528\u6237\u7684\u5c31\u53ef\u4ee5\u3002\u7528\u540c\u4e00\u4e2a\u7aef\u53e3\u63a5\u6536\uff0c\u7136\u540e\u518d\u5206\u53d1\u3002

使用DatagramSocket和DatagramPacket
其中DatagramSocket使用一个发送的端口号
DatagramPacket的参数
DatagramPacket(bytes[] bytes,int bytes[].length,InetAddress ip, int port);里的port就是目标端口
要向两个端口号发送,需要创建两个DatagramPacket,分别填写两个IP地址和端口号,并用DatagramSocket发送。
另外两个端口需要做监听
要注意ip要为局域网可以畅通无阻,广域网可能导致网管阻止
下面是个例子,发两遍即可。
int SERVER_PORT=7000;
String severIp="192.168.1.100";
DatagramSocket clientSocket;
try
{
InetAddress local = InetAddress.getByName(severIp);
DatagramPacket dPacket;
clientSocket = new DatagramSocket;
dPacket = new DatagramPacket("Hello".getBytes("utf-8"),"Hello".getBytes("utf-8").length,
local, SERVER_PORT);
clientSocket.send(dPacket);//这里是发送
byte[] msg = new byte[11246];
DatagramPacket rPacket = new DatagramPacket(msg, msg.length);
clientSocket.receive(rPacket);//这里是接收监听
}
catch (IOException e)
{
e.printStackTrace();
}
clientSocket.close();

  • 鎬ユ眰涓涓JAVA缂栧啓鐨勫眬鍩熺綉鑱婂ぉ浠g爜?涓嶈姹傚緢澶嶆潅銆傚彧瑕佸彲浠ュ湪涓ゅ彴鏈哄瓙...
    绛旓細this.setTitle("浣跨敤 UDP 鐨勭綉缁鑱婂ぉ绋嬪簭"); this.setBounds(100,100,480,430); this.setVisible( true ); }//public j03130301() end public void run() { //鎺ユ敹鏁版嵁 while( true ) { //鎸佺画鎺ユ敹閫佸埌鏈湴绔殑淇℃伅 byte[] buf = new byte[100];//棰勬湡鏈澶氬彲鏀 100 涓 byte try { Datagra...
  • java udp澶氱獥鍙鑱婂ぉ闂
    绛旓細鑱婂ぉ绋嬪簭鐨勮瘽浣犳渶濂藉啓涓涓鎴风鍜屾湇鍔″櫒锛屽綋鏈嶅姟鍣ㄦ敹鍒颁俊鎭椂閬嶅巻姣忎釜瀹㈡埛绔紝骞剁粰瀹㈡埛绔彂閫佷俊鎭紝涓嶈繃杩欑鏂瑰紡缁欐瘡涓鎴风鍙戦鐢ㄧ殑銆
  • TCP鍜UDP閫氫俊鏈変粈涔堝尯鍒 濡備綍鍒嗗埆鐢╦ava瀹炵幇?
    绛旓細\x0d\x0aUDP鍙槸鏁版嵁鎶ュ彂閫侊紝瀹冪殑浼樼偣閫熷害蹇紝骞堕潪瑕佸悜TCP閭f牱楹荤儲寤虹珛锛屽畠鍙礋璐e皢淇℃伅鍙戝嚭锛屼絾鏄苟涓嶇‘淇濅俊鎭殑鍑嗙‘瀹屾暣鎬х瓑锛屽氨濂芥瘮鍙戠煭淇★紝鐭俊鏄嚭鍘讳簡锛屼絾鏄腑闂存槸鍚︽湁闂锛屾槸鍚﹀鏂规墜鏈鸿兘鏀跺埌灏变笉绠′簡銆俓x0d\x0a鍦java涓鎯宠瀹炵幇涓婅堪涓ょ鍗忚閫氫俊锛屽彲閲囩敤socket寤虹珛杩炴帴锛宻ocket鍙互鐞嗚В涓虹爜澶...
  • java缃戠粶缂栫▼搴旇鎬庢牱鍦ㄥ鎴风鍜屾湇鍔″櫒闂村疄鐜伴氫俊?
    绛旓細浠ュ墠鍐欑殑锛岀収璐翠簡銆傘傘傛湇鍔″櫒绔細import java.awt.*;\x0d\x0aimport java.awt.event.WindowAdapter;\x0d\x0aimport java.awt.event.WindowEvent;\x0d\x0aimport java.io.*;\x0d\x0aimport java.net.*;/*6銆 閲囩敤UDP鍗忚锛缂栧啓涓涓Java缃戠粶搴旂敤绋嬪簭锛璇ュ簲鐢ㄥ垎鏈嶅姟鍣ㄧ绋嬪簭鍜屽鎴风...
  • java缂栫▼ 鍒╃敤UDP鏂瑰紡,瀹㈡埛绔悜鏈嶅姟鍣ㄥ彂閫佷笁杈瑰,鏈嶅姟鍣,鏍规嵁涓夎竟鍊...
    绛旓細瀹㈡埛绔厛鍙戦佸啀鎺ユ敹 鏈嶅姟鍣ㄧ鍏堟帴鏀跺啀鍙戦 涓嬮潰缁欎綘涓涓猻erver鍜宑lient鐨勪緥瀛 浣犲湪鍩虹涓婃敼涓涓嬪氨琛屼簡 client鍙戦佺殑鏃跺欏彂閫佷笁杈瑰 server鎺ユ敹鍚 鍐欎竴涓绠椾笁瑙掑舰闈㈢Н鐨勫嚱鏁 鎶婃帴鏀跺埌鐨勪笁杈瑰间紶鍏ュ嚱鏁拌绠楀嚭缁撴灉浣滀负鏁版嵁杩斿洖鍒癱lient绔 /** *UDPServer */import java.io.*;import java.net.*;...
  • java鑳藉紑鍙戣棰鑱婂ぉ鍚
    绛旓細鑲畾鐨勮锛氳兘锛佸ぇ鑷寸殑璇翠竴涓嬪師鐞嗭細棣栧厛浣犺瀛︿範涓涓java鐨缃戠粶缂栫▼鏂归潰鐨勪笢瑗匡紝鍍廡CP/IP UDP鍗忚绛夌瓑鐨勪笢瑗匡紝鍥犱负瑕缂栧啓瑙嗛鑱婂ぉ绋嬪簭锛杩欎簺鐞嗚鎬х殑涓滆タ鏄繀椤荤殑銆傜幇鍦ㄥ亣璁句綘宸茬粡鍙互缂栧啓鍑虹畝鍗曞姛鑳界殑缃戠粶鑱婂ぉ鍔熻兘鐨勮蒋浠朵簡锛屾兂鍦ㄥ氨鏄鐢ㄤ綘缂栧啓杞欢椹卞姩璧蜂綘鐨勬憚鍍忓ご浜嗐傞鍏堜綘瑕佺‘淇濅綘鐨勬憚鍍忓ご鐨勫紑鍙戝晢...
  • 浣跨敤Java缃戠粶缂栫▼缂栧啓SIP娑堟伅鐨勬敹鍙,TCP鍜UDP鏈変粈涔堝尯鍒?
    绛旓細鐩墠閫氱敤鐨勭紪绋嬭瑷鏈変袱绉嶅舰寮忥細姹囩紪璇█鍜岄珮绾ц瑷銆傛眹缂栬瑷鐨勫疄璐ㄥ拰鏈哄櫒璇█鏄浉鍚岀殑锛岄兘鏄洿鎺ュ纭欢鎿嶄綔锛屽彧涓嶈繃鎸囦护閲囩敤浜嗚嫳鏂囩缉鍐欑殑鏍囪瘑绗︼紝鏇村鏄撹瘑鍒拰璁板繂銆傚畠鍚屾牱闇瑕佺紪绋嬭呭皢姣忎竴姝ュ叿浣撶殑鎿嶄綔鐢ㄥ懡浠ょ殑褰㈠紡鍐欏嚭鏉ャ傛眹缂绋嬪簭閫氬父鐢变笁閮ㄥ垎缁勬垚锛氭寚浠ゃ佷吉鎸囦护鍜屽畯鎸囦护銆傛眹缂栫▼搴忕殑姣忎竴鍙ユ寚浠ゅ彧鑳藉搴...
  • 鎺ㄨ崘鍏充簬UDP鍗忚鐨Java缂栫▼鐨勪功
    绛旓細杩欐湰涔︾殑鍐呭娣卞叆娴呭嚭锛岄潪甯搁傚悎鍒濆鑰呭拰鏈夌粡楠岀殑寮鍙戜汉鍛樸傘Java鏍稿績鎶鏈嵎鈪犮 - 杩欐湰涔︽槸Java缂栫▼鐨勭粡鍏告暀鏉愪箣涓锛屽叾涓寘鍚簡鍏充簬Java缃戠粶缂栫▼鐨勯儴鍒嗭紝鐗瑰埆鏄UDP鍗忚鐨浣跨敤銆傝繖鏈功鐨勫唴瀹规瘮杈冨叏闈紝閫傚悎瀵笿ava缃戠粶缂栫▼鏈夊垵姝ヤ簡瑙g殑璇昏呫傘婃繁鍏ョ悊瑙ava缃戠粶缂栫▼銆 - 杩欐湰涔︾敱Netty鐨勫垱濮嬩汉涔嬩竴缂栧啓...
  • 璇锋暀涓涓JAVA UDP绋嬪簭闂銆傛垜缂栦簡涓涓猆DP閫氫俊绋嬪簭,瀹炵幇瀹㈡埛绔悜鏈嶅姟鍣...
    绛旓細姝e浣犳墍璇达紝UDP涓嶉渶瑕佸疄鏃惰繛鎺ワ紝瀹㈡埛绔彧璐熻矗鍙戦侊紝涓嶄繚璇佹垚鍔燂紝鏈嶅姟绔篃鍙帴鏀舵纭埌杈剧殑鏁版嵁鍖咃紝浣犳病鏈夎捣鏈嶅姟绔箣鍓嶇殑瀹㈡埛绔墍鍙戦鐨刄DP鏁版嵁鍖呴兘灞炰簬涓㈠寘锛屽氨鍍忔垜浠帺涓浜涚綉娓革紝濡傛灉缃戠粶涓嶅ソ锛屼細鍑虹幇涓鍗′竴鍗$殑锛屾湰鏉ュ湪杩欎笅涓绉掔獊鐒剁Щ鍔ㄥ埌鍙︿竴涓湴鏂癸紝涓棿绉诲姩鐨勮繃绋嬫病鏈夊嚭鐜帮紝杩欏氨灞炰簬涓㈠寘浜嗐
  • 鎺ㄨ崘鍏充簬UDP鍗忚鐨Java缂栫▼鐨勪功
    绛旓細杩欐湰涔︾郴缁熷湴浠嬬粛浜咼ava缃戠粶缂栫▼鍜屽垎甯冨紡璁$畻鐨勫熀鏈蹇点佸師鐞嗗拰瀹炶返銆傚叾涓兜鐩栦簡UDP鍗忚鐨勫叿浣撳唴瀹瑰拰Java缂栫▼涓笌UDP鐩稿叧鐨勬妧鏈鐐广傞氳繃闃呰杩欐湰涔︼紝鎮ㄥ皢浜嗚ВUDP鍗忚鐨勫熀鏈師鐞嗗拰宸ヤ綔鏈哄埗銆傛偍灏嗗涔犲浣浣跨敤Java缂栫▼璇█杩涜UDP鍗忚鐨勫紑鍙戯紝鍖呮嫭UDP濂楁帴瀛楃紪绋嬨佹暟鎹姤鐨勫彂閫佸拰鎺ユ敹銆侀敊璇鐞嗙瓑銆傛澶栵紝涔︿腑...
  • 扩展阅读:十大程序员接私活平台 ... 学java一般能干什么 ... java编程零基础入门 ... java程序员兼职网站 ... 免费开源java项目网站 ... java程序员接私活平台 ... java接单渠道 ... 用java编写一个窗口界面 ... 如何编写一个简单的java ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网