首页 > 技术文章 > socket编程浅知识

dabu 2020-03-17 21:06 原文

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 发送信息 记得加上\n【为了方便读取】
35             String msg="hello,Najing,you ip:"+server.getInetAddress().getHostAddress()+"\n";
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 \n";//\n代表读取的时候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 }

结果:

 

 

推荐阅读