怎样关闭被占用的端口,可以实现吧?请指教 你是要建立ServerSocket吧,你try catch一次就可以啦try { Server socket = new ServerSocket(1111);}catch(IOexception ioe) { //不能建立断口(可能是你没有权限或者已经被占用了)} 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我是采用udp数据包,浏览器端applet监听由服务器发送数据的一个端口,如果由系统分配端口,得在二者间多传送一次数据。要是能在监测到该端口被占用的同时,关闭这个端口,重新建立连接就好了。 除非已经打开的端口是自己用程序来打开的.现在还不知道java能不能如此实现你所说的功能。 to gja106:是的,是我自己写的网络程序,运行第一遍后,就占用了端口,后来再次运行这个程序的时候就提示address in use:can't bind.怎么解决? 那你把端口关闭不就行了吗,DatagramSocket不是有个close方法。我现在不点不理解你的要求了。是运行两次同一程序,还是两个不同的程序要用同一端口,还是? 两种情况都有,对于第一种如果判断到端口占用,怎么实现close方法?注:程序是applet嵌入网页中,源程序如下:package hjq;import java.awt.*;import java.applet.*;import java.net.*;import java.sql.*;import java.util.*;import javax.swing.*;import java.io.*;public class hjApplet extends java.applet.Applet implements Runnable{ String userID=null,sfbs=null; String servernm; Statement stmt; ResultSet rs=null; Connection conn; String ip; final static int DGram_Port=1090; DatagramSocket s=null; public hjApplet() { } public void init(){ userID=getParameter("userID"); ip=getParameter("userIP"); try{ servernm=getDocumentBase().getHost();//"210.42.147.52"; DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); String url="jdbc:oracle:thin:@210.42.147.52:1521:Oradb"; conn=DriverManager.getConnection(url,"admin","admin"); stmt=conn.createStatement(); String sql="select user_sfbs from user_table where user_id='"+userID+"'"; rs=stmt.executeQuery(sql); while(rs.next()) sfbs=rs.getString(1); rs.close(); stmt.close(); }catch(Exception eurl){ eurl.printStackTrace(); } new Thread(this).start(); } public void run(){ try{ s=new DatagramSocket(DGram_Port); while(true){ try{ byte[] recbuf=new byte[50]; DatagramPacket dp=new DatagramPacket(recbuf,recbuf.length); s.receive(dp); String recstr=new String(dp.getData(),0,dp.getLength()); String appip=dp.getAddress().toString(); dealdp(recstr); }catch(Exception rexcept){ rexcept.printStackTrace(); } } }catch(Exception rexcept1){ rexcept1.printStackTrace(); } } void dealdp(String recstr){ String sendstr=new String(); sendDatagram("6#"+recstr); } void sendDatagram(String sendstr){ DatagramSocket socket=null; try{ socket=new DatagramSocket(); byte[] buf=new byte[20]; buf=sendstr.getBytes(); InetAddress ip=InetAddress.getByName(servernm); DatagramPacket dp=new DatagramPacket(buf,buf.length,ip,DGram_Port); socket.send(dp); socket.close(); }catch(Exception dperr){ } } public void dispose(){ try{ s.close(); }catch(Exception closes){} }}请指教,谢谢! 如果能关闭别人的端口,java就成了最不安全的语言了.....谁打开的端口就应该由谁去关闭. 1.打开端口之前,尝试去连接你认为已经打开的本地端口,根据返回的异常来决定该端口的使用情况(捕捉到该端口已经打开的异常才要往下走,否则得...);如果连接成功,发一个关闭该端口的信息(这要在你的程序中自己定义协议了)。2.jvm有没有实现共享内存。如果实现也就好办了。 try{ s=new DatagramSocket(DGram_Port);}catch(Exception rexcept1){ rexcept1.printStackTrace(); try{s.close();}catch(Exception e){}}如果DGram_Port端口被占用,则捕捉到异常,这时关闭socket,然后再连接一次这个端口,是吗? 如果这个端口对DatagramSocket只是发送,你怎么办?用个简单的笨拙办法吧,建个文件(xx.loc)里边放一个标志信息。要用某个端口必需到该文件去登记,如果端口占用标志已经有,你再放一个强迫该端口关闭的标志信息到文件上去。占用端口的程序测试到关闭标志信息就自动关闭释放端口。有共享内存就好了。 共享内存在Java中的实现和应用http://www-900.ibm.com/developerWorks/java/l-memshare/index.shtml 没关闭的port交给了操作系统管理,除非用native代码,否则可能无法实现。 真心不知哪里出的问题!【JAVA GUI】 问一个简单的设计问题 如何判断选择的是哪个单选框 关于延时repatint()的问题 请教关于RMI和多线程的问题 巨爽!!!jdbtable 的分页打印和分页预览终于搞定了。 散分 给我段程序 (在线等待)用JTable显示查询数据库的内容,第二次查询后点击JTable,显示数据会回到第一次显示内容,如何改变?谢谢。 JBuilder6中的JavaDoc是如何使用的? 如何用java实现数据库inner join算法,将不同list中的map关联到一行上 在jbuilder中如何给存储过程赋值? 没有办法看,这里贴子的内容
现在还不知道java能不能如此实现你所说的功能。
怎么解决?
我现在不点不理解你的要求了。
是运行两次同一程序,还是两个不同的程序要用同一端口,还是?
注:程序是applet嵌入网页中,源程序如下:
package hjq;import java.awt.*;
import java.applet.*;
import java.net.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import java.io.*;public class hjApplet extends java.applet.Applet implements Runnable{
String userID=null,sfbs=null;
String servernm;
Statement stmt;
ResultSet rs=null;
Connection conn;
String ip;
final static int DGram_Port=1090;
DatagramSocket s=null; public hjApplet() {
} public void init(){
userID=getParameter("userID");
ip=getParameter("userIP");
try{
servernm=getDocumentBase().getHost();//"210.42.147.52";
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
String url="jdbc:oracle:thin:@210.42.147.52:1521:Oradb";
conn=DriverManager.getConnection(url,"admin","admin");
stmt=conn.createStatement();
String sql="select user_sfbs from user_table where user_id='"+userID+"'";
rs=stmt.executeQuery(sql);
while(rs.next())
sfbs=rs.getString(1);
rs.close();
stmt.close();
}catch(Exception eurl){
eurl.printStackTrace();
}
new Thread(this).start();
} public void run(){
try{
s=new DatagramSocket(DGram_Port);
while(true){
try{
byte[] recbuf=new byte[50];
DatagramPacket dp=new DatagramPacket(recbuf,recbuf.length);
s.receive(dp);
String recstr=new String(dp.getData(),0,dp.getLength());
String appip=dp.getAddress().toString();
dealdp(recstr);
}catch(Exception rexcept){
rexcept.printStackTrace();
}
}
}catch(Exception rexcept1){
rexcept1.printStackTrace();
}
} void dealdp(String recstr){
String sendstr=new String();
sendDatagram("6#"+recstr);
}
void sendDatagram(String sendstr){
DatagramSocket socket=null;
try{
socket=new DatagramSocket();
byte[] buf=new byte[20];
buf=sendstr.getBytes();
InetAddress ip=InetAddress.getByName(servernm);
DatagramPacket dp=new DatagramPacket(buf,buf.length,ip,DGram_Port);
socket.send(dp);
socket.close();
}catch(Exception dperr){
}
} public void dispose(){
try{
s.close();
}catch(Exception closes){}
}
}
请指教,谢谢!
谁打开的端口就应该由谁去关闭.
2.jvm有没有实现共享内存。如果实现也就好办了。
s=new DatagramSocket(DGram_Port);
}catch(Exception rexcept1){
rexcept1.printStackTrace();
try{s.close();}catch(Exception e){}
}
如果DGram_Port端口被占用,则捕捉到异常,这时关闭socket,然后再连接一次这个端口,是吗?
用个简单的笨拙办法吧,建个文件(xx.loc)里边放一个标志信息。要用某个端口必需到该文件去登记,如果端口占用标志已经有,你再放一个强迫该端口关闭的标志信息到文件上去。占用端口的程序测试到关闭标志信息就自动关闭释放端口。有共享内存就好了。
http://www-900.ibm.com/developerWorks/java/l-memshare/index.shtml