-
ip地址和端口號組成了所謂的socket查看全部
-
端口號用來區別一臺主機上不同應用程序的通信。查看全部
-
package?com.study.socket; import?javax.sound.sampled.Port; import?java.io.IOException; import?java.net.*; /** ?*?UDP?Client客服端 ?*/ public?class?UDPClient?{ ????public?static?void?main(String[]?args)?throws?IOException?{ ????????//1.定義消息?服務端ip地址?端口號 ????????String?msg?=?"用戶名:sw;密碼:123456"; ????????InetAddress?address?=?InetAddress.getByName("DESKTOP-VQBUTGQ"); ????????int?port?=?8000; ????????//2.創建數據報 ????????byte[]?data?=?msg.getBytes(); ????????DatagramPacket?packet?=?new?DatagramPacket(data,?data.length,?address?,?port?); ????????//3.創建socket ????????DatagramSocket?socket?=??new?DatagramSocket(); ????????//4.發送消息 ????????socket.send(packet); ????????//5.接收反饋信息 ????????byte[]?data1?=?new?byte[1024]; ????????DatagramPacket?packet1?=?new?DatagramPacket(data1?,?0?,?data1.length); ????????socket.receive(packet1); ????????String?rt?=?new?String(data1,0,packet1.getLength()); ????????System.out.println("這是客戶端,服務端反饋信息為:?"?+?rt); ????????//5.釋放資源 ????????socket.close(); ????} }
package?com.study.socket; import?java.io.IOException; import?java.net.DatagramPacket; import?java.net.DatagramSocket; import?java.net.InetAddress; import?java.net.SocketException; /** *?UDP?服務器端 */ public?class?UDPServer?{ ???public?static?void?main(String[]?args)?{ ???????try?{ ???????????//1.建立socket并制定端口號 ???????????DatagramSocket?socket?=?new?DatagramSocket(8000); ???????????int?num?=?0; ???????????while?(true){ ???????????????UDPServerThread?thread?=?new?UDPServerThread(socket); ???????????????thread.setPriority(4); ???????????????thread.run(); ???????????????num++; ???????????????System.out.println("服務器端接受了?"?+?num?+?"?個客戶端請求!"); ???????????} ???????}?catch?(SocketException?e)?{ ???????????e.printStackTrace(); ???????}?catch?(IOException?e)?{ ???????????e.printStackTrace(); ???????} ???} }
package?com.study.socket; import?java.io.IOException; import?java.net.DatagramPacket; import?java.net.DatagramSocket; import?java.net.InetAddress; /** *?UDP?server?多線程實現 */ public?class?UDPServerThread?extends?Thread{ ???DatagramSocket?socket?=?null; ???public?UDPServerThread(DatagramSocket?socket){ ???????this.socket?=?socket; ???} ???@Override ???public?void?run()?{ ???????try?{ ???????????byte[]?data?=?new?byte[1024]; ???????????DatagramPacket?packet?=?new?DatagramPacket(data,data.length); ???????????//3.接收客戶端發送的數據信息 ???????????socket.receive(packet);//此方法在接收到數據報之前一直阻塞 ???????????//4.讀取數據報信息 ???????????String?msg?=?new?String(data,0,packet.getLength()); ???????????System.out.println("UDP?server服務器接收到的信息:?"?+?msg); ???????????//5.反饋信息 ???????????String?rt?=?"歡迎您!"; ???????????byte[]?data1?=?rt.getBytes(); ???????????InetAddress?address?=?packet.getAddress(); ???????????int?port?=?packet.getPort(); ???????????DatagramPacket?packet1?=?new?DatagramPacket(data1,?data1.length?,?address?,?port?); ???????????socket.send(packet1); ???????}?catch?(IOException?e)?{ ???????????e.printStackTrace(); ???????} ???} }
查看全部 -
package?com.study.socket; import?java.io.IOException; import?java.io.OutputStreamWriter; import?java.io.PrintWriter; import?java.net.Socket; /** *?socket編程模擬客服端 */ public?class?Client?{ ???public?static?void?main(String[]?args)?{ ???????//1.創建客戶端socket ???????Socket?socket?=?null; ???????try?{ ???????????socket?=?new?Socket("127.0.0.1",8888); ???????????//2.獲取輸出流 ???????????OutputStreamWriter?osw?=?new?OutputStreamWriter(socket.getOutputStream()); ???????????PrintWriter?pw?=?new?PrintWriter(osw); ???????????pw.write("用戶名:polly;密碼:809"); ???????????pw.flush(); ???????????//4.釋放資源 ???????????pw.close(); ???????????osw.close(); ???????????socket.close(); ???????}?catch?(IOException?e)?{ ???????????e.printStackTrace(); ???????} ???} }
package?com.study.socket; import?java.io.*; import?java.net.ServerSocket; import?java.net.Socket; /** *?socket編程模擬服務器端 */ public?class?Server?{ ???public?static?void?main(String[]?args)?{ ???????try?{ ???????????//1.建立服務端socket ???????????ServerSocket?serverSocket?=?new?ServerSocket(8888); ???????????int?num?=?0; ???????????while(true){ ???????????????//2.監聽端口 ???????????????Socket?socket?=?serverSocket.accept(); ???????????????ServerThread?st?=?new?ServerThread(socket); ???????????????st.setPriority(4);//設置線程的優先級,范圍是【1,10】??默認是5 ???????????????st.start(); ???????????????num++; ???????????????System.out.println("服務器端接受?"?+?num?+?"?個客戶端請求!"); ???????????} ???????}?catch?(IOException?e)?{ ???????????e.printStackTrace(); ???????} ???} }
package?com.study.socket; import?java.io.*; import?java.net.Socket; /** *?服務器線程實現 */ public?class?ServerThread?extends?Thread?{ ???Socket?socket?=?null; ???public?ServerThread(Socket?socket){ ???????this.socket?=?socket; ???} ???@Override ???public?void?run()?{ ???????if(socket?!=?null){ ???????????//讀取輸入流 ???????????InputStream?is?=?null; ???????????InputStreamReader?isr?=?null; ???????????BufferedReader?br?=?null; ???????????OutputStreamWriter?osw?=?null; ???????????PrintWriter?pw?=?null; ???????????try?{ ???????????????is?=?socket.getInputStream(); ???????????????isr?=?new?InputStreamReader(is); ???????????????br?=?new?BufferedReader(isr); ???????????????System.out.println("服務器讀取客戶端信息:"?+?socket.getLocalAddress()?+?"?:?"?+ ???????????????????????socket.getLocalPort()??+?"?"?+?br.readLine()); ???????????????//返回響應流 ???????????????osw?=?new?OutputStreamWriter(socket.getOutputStream()); ???????????????pw?=?new?PrintWriter(osw); ???????????????pw.write("請求已接到!"); ???????????????pw.flush(); ???????????}?catch?(IOException?e)?{ ???????????????e.printStackTrace(); ???????????}?finally?{ ???????????????//關閉資源 ???????????????try?{ ???????????????????if(pw?!=?null)??pw.close(); ???????????????????if(osw?!=?null)??osw.close(); ???????????????????if(br?!=?null)??br.close(); ???????????????????if(isr?!=?null)??isr.close(); ???????????????????if(is?!=?null)??is.close(); ???????????????????if(socket?!=?null)??socket.close(); ???????????????}?catch?(IOException?e)?{ ???????????????????e.printStackTrace(); ???????????????} ???????????} ???????} ???} }
查看全部 -
基于udp通信:
查看全部 -
Socket socket=serverSocket.accept();
查看全部 -
URL--統一資源定位符=協議名稱:資源名稱
java.net提供URL類表示URL? ?
1.URL類中的常用方法:
//創建一個URL對象
? ? URL url = new URL("http://www.baidu.com");??
? ? URL url1 = new URL(url, "/index.html?usrname=lqq#test");
//url的常用方法
? ? System.out.println("URL主機名稱:"+url1.getHost());
? ? System.out.println("URL協議:"+url1.getProtocol());
? ? System.out.println("URL端口:"+url1.getPort());
? ? System.out.println("URL文件路徑:"+url1.getPath());
? ? System.out.println("URL查詢字符串:"+url1.getQuery());
? ? System.out.println("URL相對路徑:"+url1.getRef());
? ? System.out.println("URL文件名:"+url1.getFile());? ?
2.通過URL獲取html文件內容:
public static void main(String[] args) throws IOException {
? ?URL url=new URL("http://www.snnu.edu.cn");
? ?InputStream is =url.openStream();
? ?InputStreamReader isr=new InputStreamReader(is);
? ?BufferedReader bufferedReader = new BufferedReader(isr);
? ?String data=bufferedReader.readLine();
? ?while (data!=null){
? ? ? ?System.out.println(data);
? ? ? ?data=bufferedReader.readLine();
? ?}
? ?bufferedReader.close();
? ?isr.close();
? ?is.close();
}查看全部 -
網絡基礎知識
地址、端口號、協議
java 提供的網絡功能有四大類
InetAddress :用于標識網絡上的硬件資源
URL:統一資源定位符 通過URL可以直接讀取或寫入網絡上的數據
Sockets:使用TCP協議實現網絡通信的Socket相關的類
Datagram:使用UDP協議,將數據保存在數據報中,通過網絡進行通信。
?
查看全部 -
通信模型啊
查看全部 -
InetAddress.getLocalhost();獲取InetAddress實例
查看全部 -
Socket編程
1、網絡基礎知識
2、InetAddress類
3、URL
4、TCP編程(Socket)
5、UDP編程(Datagram)
IP、端口、協議(共同語言)
tcp/ip模型?物理層、數據鏈路層、網絡層、傳輸層、應用層
端口號范圍0~65535,0~1023為系統保留
Java網絡功能四大類:InetAddress、URL、Socket、Datagram
查看全部 -
多線程的知識點
查看全部 -
Socket通信模型
查看全部 -
實際應用時是以對象的形式進行傳輸
查看全部 -
不必關閉輸入輸出流
查看全部
舉報