網絡通信協議(規則):對數據的傳輸格式 速率 步驟等作了規定 經常使用的是TCP\IP協議 UDP協議
IP地址 是電腦的地址 端口號指的是 電腦程序的端口號
InetAddress類
獲取主機的inet對象
InetAddress inet=InetAddress.getByName("192.168.1.171");
獲取本地主機對象
InetAddress inet2=InetAddress.getLocalHost();
獲取主機名
inet.getHostName()
返回IP地址
inet.getHostAddress()
UDP協議
發送端不會在乎接收端是否收到,接收端也不會在乎發送端是否發送。
TCP協議
分客戶端和服務器端 第一次握手是客戶端向服務器端發出鏈接請求(請求鏈接) 你二次握手是服務器端向客戶端回覆一個響應(確認鏈接) 第三次握手 客戶端在向服務端發送確認發送消息請求(正在鏈接)
UDP簡單聊天
建立接收端
//建立DatagramSocket對象
DatagramSocket ds=new DatagramSocket(6666);
//建立接受數組
byte[] b=new byte[1024];
//建立數據包對象
while(true){
DatagramPacket dp=new DatagramPacket(b, b.length);
//接受數據
ds.receive(dp);
//拆包
//獲取發送端ip地址
String ip=dp.getAddress().getHostAddress();
//獲取端口號
int port=dp.getPort();
//獲取數據長度
int length=dp.getLength();
System.out.println("ip地址爲:"+ip+",端口號爲:"+port+",發送內容爲:"+new String (b,0,length));
}
//釋放資源
//ds.close();數組
建立發送端
Scanner sc=new Scanner(System.in);
//建立數據包,封裝要發送的數據以及明確接收端的IP和端口號
//明確接收端的ip地址
InetAddress ip=InetAddress.getByName("127.0.0.1");
//建立DatagramSocket對象 用於數據包發送
DatagramSocket ds=new DatagramSocket();
while(true){
byte[] b=sc.next().getBytes();
DatagramPacket dp=new DatagramPacket(b,b.length,ip,6666);
//發送
ds.send(dp);
}
//釋放資源
//ds.close();服務器
tcp通信網絡
分客戶端和服務器端 第一次握手是客戶端向服務器端發出鏈接請求(請求鏈接) 你二次握手是服務器端向客戶端回覆一個響應(確認鏈接) 第三次握手 客戶端在向服務端發送確認發送消息請求(正在鏈接)socket
客戶端:tcp
建立客戶端對象:Socket socket=new Socket("127.0.0.1",6666);spa
經過Socket對象建立輸出流對象:OutputStream out=socket.getOutputStream();server
寫要傳輸的內容:out.write("你好".getbytes())
接收服務器返回的數據:建立數據接收流對象:InputStream in=socket.getInputStream()
建立接收數據用的byte數組:byte[] bytes=new char[1024];7.建立ch的長度:int len=in.read(bytes);
接收數據並打印system.out.println(內容是:+new String(bytes,0,len));
釋放資源:socket.close();對象
服務器端:
建立服務器對象:ServerSocket server=new ServerSocket(6666);
建立客戶端接收對象:Socket socket=server.accrpt();
建立字節輸入流:InputStream in=socket.getInputStream();
建立接收的byte數組:byte[] bytes=new byte[1024];
建立接收數據的byte數組長度:int len=in.read(bytes); 獲得客戶端ip:String ip=socket.getInetAddress().getHostAddress()
打印接收數據:system.out.println(ip地址:+ip+內容+new String(bytes,0,len));
回覆客戶端:1.建立字節輸出流:OutputStream out=socket.getOutputStream();
寫返回數據:out.writer("你好".getbytes); 3.釋放資源:server.close();blog