1:网络7层和tcp/ip5层
tcp协议; 三次握手 四次挥手 使用字节流进行信息交互
2:IP和端口
ip: 计算机在网络里面的唯一标识
端口: 程序在电脑里面的唯一标识
3: socket编程
InetAddress(ip和域名对象)
1 InetAddress[] addrs = InetAddress.getAllByName("www.baidu.com"); 2 3 if (addrs != null && addrs.length > 0) { 4 5 for (InetAddress addr : addrs) { 6 7 System.out.println("--->" + addr.getHostAddress()); 8 9 } 10 11 }
客户端 服务端 模型图
案例:完成客户端发送消息给服务端,并且服务端回答消息给客户端
服务器端:
1 package com.lv.study.pm.socket2; 2 3 import java.io.BufferedReader; 4 import java.io.BufferedWriter; 5 import java.io.IOException; 6 import java.io.InputStream; 7 import java.io.InputStreamReader; 8 import java.io.OutputStream; 9 import java.io.OutputStreamWriter; 10 import java.net.ServerSocket; 11 import java.net.Socket; 12 13 public class DemoServer { 14 15 public static void main(String[] args) { 16 17 18 try { 19 //1:新建一个服务端对象 20 ServerSocket serverSocket=new ServerSocket(8888); 21 22 System.out.println("i am server , start server......"); 23 24 //2:等待客服端连接,开始监听 25 //如果有连接;将会得到客服端的连接(socket) 26 Socket server= serverSocket.accept(); 27 28 //3:向客服端发送信息 29 OutputStream os=server.getOutputStream(); 30 31 //3.1 将字节流包装成字符流进行操作 32 BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os)); 33 34 //3.2 发送信息 记得加上 【为了方便读取】 35 String msg="hello,Najing,you ip:"+server.getInetAddress().getHostAddress()+" "; 36 bw.write(msg); 37 bw.flush();//不然对方接收不了 这里不能用close 38 39 //4 接收客服端发给我的信息 40 InputStream is=server.getInputStream(); 41 42 //4.1 将字节流变成字符流来操作 43 BufferedReader br=new BufferedReader(new InputStreamReader(is)); 44 45 //4.2 信息读取 46 String readLine =br.readLine(); 47 System.out.println(readLine); 48 49 50 } catch (IOException e) { 51 e.printStackTrace(); 52 } 53 54 } 55 56 }
客服端:
1 package com.lv.study.pm.socket2; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.io.OutputStream; 8 import java.net.Socket; 9 import java.net.UnknownHostException; 10 11 public class DemoClient { 12 13 public static void main(String[] args) { 14 15 //1:新建一个socket对象 根据ip和端口 16 String ip="127.0.0.1"; 17 int port=8888; 18 try { 19 Socket client=new Socket(ip,port); 20 21 //2 接收服务器发过来的消息 22 InputStream is=client.getInputStream(); 23 24 //2.1转成字符流 25 BufferedReader br=new BufferedReader(new InputStreamReader(is)); 26 String r1=br.readLine(); 27 System.out.println("服务器发来的消息"+r1); 28 29 //3向服务器发送消息 30 OutputStream os=client.getOutputStream(); 31 String msg="hello Nanjing,i am client ";// 代表读取的时候readline能读到 32 os.write(msg.getBytes()); 33 os.flush();//如果不清空会有问题 34 35 36 } catch (UnknownHostException e) { 37 e.printStackTrace(); 38 } catch (IOException e) { 39 e.printStackTrace(); 40 } 41 42 } 43 44 }
结果: