第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

老師的作業(yè)第一次運行一直不正常,還有socket關(guān)閉的問題,請幫忙看下

服務(wù)器端代碼

package?com.nettest;

import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;

public?class?UDPserver?{

	public?static?void?main(String[]?args)?throws?IOException?{
		byte[]?data=null;
		DatagramPacket?packet?=?null;
		DatagramSocket?socket?=new?DatagramSocket(8800);
		UDPThread?thread=null;
		int?count?=1;
		while(true){
			data=new?byte[1024];
			packet?=?new?DatagramPacket(data,?data.length);
			System.out.println("服務(wù)器端已啟動,等待客戶端連接");
			socket.receive(packet);
			System.out.println("客戶端連接");
			System.out.println("客戶端連接數(shù)量為:"+count);
			thread=new?UDPThread(packet,socket,data);
			thread.start();	
			count++;
		}
	}
}

客戶端代碼

package?com.nettest;

import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.SocketException;
import?java.net.UnknownHostException;

public?class?UDPClient?{
	public?static?void?main(String[]?args)?throws?IOException?{
		InetAddress?add=InetAddress.getByName("localhost");
		int?port=8800;
		byte[]?data="用戶名:admin;密碼:123".getBytes();
		DatagramPacket?packet=new?DatagramPacket(data,?data.length,add,port);
		DatagramSocket?socket=new?DatagramSocket();
		socket.send(packet);
		
		byte[]?data2=new?byte[1024];
		DatagramPacket?packe2=new?DatagramPacket(data2,?data2.length);
		socket.receive(packe2);
		String?s=new?String(data2,0,packe2.getLength());
		System.out.println(s);
		
		socket.close();
	}
}

線程代碼

package?com.nettest;

import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.SocketException;

public?class?UDPThread?extends?Thread?{	
	byte[]?data=null;
	DatagramPacket?packet?=?null;
	DatagramSocket?socket?=?null;
	DatagramPacket?packet2=null;
	byte[]?data2=null;
	UDPThread(DatagramPacket?packet,DatagramSocket?socket,byte[]?data){
		this.packet=packet;
		this.socket=socket;
		this.data=data;
	}
	public?synchronized?void?run(){
		try?{
			String?s=new?String(data,0,packet.getLength());
			System.out.println("客戶端說:"+s);
			InetAddress?add=packet.getAddress();??
			System.out.println("客戶端IP:"+add);

			data2="歡迎您".getBytes();
			int?port=packet.getPort();
			packet2=new?DatagramPacket(data2,?data2.length,add,port);
			socket.send(packet2);

		}
		catch?(SocketException?e)?{
			e.printStackTrace();
		}?catch?(IOException?e)?{
			e.printStackTrace();
		}
		finally{
			//socket.close();			
		}

	}

}

第一運行結(jié)果一直是這樣:http://img1.sycdn.imooc.com//565552b70001336404200223.jpg

“服務(wù)器端已啟動,等待客戶端連接”這一句出現(xiàn)了兩次,客戶端正常。

還有如果我在線程代碼中的finally里設(shè)置關(guān)閉datapramsocket在運行的時候會報錯,請問老師應(yīng)該怎么解決?

http://img1.sycdn.imooc.com//565553e60001ea4710410157.jpg


正在回答

4 回答

你把UDPServer中的:DatagramSocket socket=new DatagramSocket(8800),改為DatagramSocket socket=null;然后在死循環(huán)中初始化socket=new DatagramSocket(8800);這是因為UDP是一種臨時的協(xié)議,每次傳輸完數(shù)據(jù)close之后,都必須再次創(chuàng)建

0 回復(fù) 有任何疑惑可以回復(fù)我~

使用UDP協(xié)議時,socket是通用的,所以不能再線程UDPThread中關(guān)閉,應(yīng)該在服務(wù)器UDPserver代碼中關(guān)閉


0 回復(fù) 有任何疑惑可以回復(fù)我~

使用線程的話,服務(wù)器端要一直阻塞啊,socket怎么能關(guān)閉呢是吧?


0 回復(fù) 有任何疑惑可以回復(fù)我~

沒有閉關(guān)Socket

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

老師的作業(yè)第一次運行一直不正常,還有socket關(guān)閉的問題,請幫忙看下

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號