关于端口异常处理

   创建服务器首先就要输入端口号,如果端口号是自己输入,一切都好说,但是要别人输入,就需要考虑一些情况了。
    端口号是从JTextField中取得的,而JTextField传出的是String,这需要用到Integer.parseInt转换为int。Integer.parseInt的要求比较多,不能什么都不输,不能输除0~9之外的任何字符,输入的数字不能超过-2,147,483,647~+2,147,483,647等。这就要求在调用Integer.parseInt之前要排除以上的异常,为此我写了几个小函数:

//判断输入的是否是0~9
	private boolean stringTF(JTextField jtf){
		String s=jtf.getText()+" ";
		if(!nullTF(s)){
			s=s.trim();
			byte[] bb=s.getBytes();
			for(int i=0;i<s.length();i++){
				if(bb[i]<48||bb[i]>57){
					return false;
				}else{
					
				}
			}
			return true;
		}
		return false;
	}

  

//判断是否为空
private boolean nullTF(String s){
		
		if(s.equals(" ")){
			return true;
		}else{
			return false;
		}
		
	}

 

	//判断端口是否可用//还差检查是否占用
	private boolean portTF(JTextField jtf){
	
		if(stringTF(jtf)){
			num=Integer.parseInt(jtf.getText());//取得端口文本区的字符串并转换为整型
			if(num<=65535&&num>=0){
				return true;
			}
			return false;
		}else{
			return false;
		}
		
	}

 

其中我比较纠结的是不输入情况,报错时显示的是数据格式例外,提示给的是String s="";。这个在判断是即不算null,又不是"  "。在一开始时,我在创建JTextField时加了个"  ",但这样治标不治本,不光有两个位置可以出现光标,而且输入时可能会加上空格。经过长时间的改动,我终于开化了,在getText()时加了个"  "。让高手见笑了。

     关于输入范围的处理我还没有实现,不过有两个想法,一是把一个事件监听器放入一个线程中持续检测输入(因为事件监听器不能在输入时检测),二是加一个键盘监听器。

     而如何检测端口是否被占用,我还没什么思路,想用ping但又感觉不行也不会在程序中调用。想到这里,又要深一步思考,0~1024都是知名端口,我是否会把其他程序的端口占了呢。我觉得应该个端口输入者在输入0~1024时一个提示,不要抢了同行的饭碗,与人方便与己方便。

     希望今天能有所突破。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值