17.网络编程

1.什么叫网络编程
通过套接字来进行网络传输数据,也是用字节输入输出流来读取和发送数据

2.C/S模式:
C:customer客户端:发送链接请求
S:server:服务端,监听客户端的请求
会话:一次通讯可以多次交换数据

3.网络传输协议
TCP/IP:建立直接管道,传输数据稳定,按顺序接收
UDP:不过传输过程,只关注发送和接收的结果,不一定按顺序接收数据
HTTP:网页传输

4.实现步骤:见案例
  a.写服务端,建立监听
  b.写客户端,发送链接请求
  c.建立链接后用字节流完成数据交互

5.例子

  客户端:

 1 package com.demo1123;
 2 
 3 import java.io.IOException;
 4 import java.io.OutputStream;
 5 import java.io.PrintWriter;
 6 import java.net.Socket;
 7 import java.net.UnknownHostException;
 8 import java.util.Scanner;
 9 
10 public class Client {
11     public static void main(String[] args) throws Exception, IOException {
12         //客户端发送请求去链接服务端
13         Socket socket = new Socket("192.168.5.145", 9999);
14         System.out.println("链接服务端成功!!!");
15         
16         Scanner sc = new Scanner(System.in);
17         
18         OutputStream out = socket.getOutputStream();
19         PrintWriter pw = new PrintWriter(out);//字节输出流封装成字符输出流
20         while(true){
21             System.out.println("请输入要发送的内容:");
22             String str = sc.next();
23             
24             pw.println(str);//一定要带ln换行,因为客户端是用readerLine来接收数据的
25             pw.flush();
26         }
27     }
28 }

  服务端:

 1 package com.demo1123;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.net.ServerSocket;
 8 import java.net.Socket;
 9 import java.util.zip.InflaterOutputStream;
10 
11 public class Server {
12     public static void main(String[] args) {
13         try {
14             new Server().tcpServer();
15         } catch (Exception e) {
16             e.printStackTrace();
17         }
18     }
19     
20     //tcp协议
21     public void tcpServer() throws Exception{
22         //创建服务端,打开监听
23         ServerSocket server = new ServerSocket(9999);
24         System.out.println("服务已启动.......");
25         //获取网络套接字,套接字对象是专门负责数据的发送和接收
26         Socket socket = server.accept();
27         System.out.println("客户端链接进来成功,客户端的ip是"+socket.getInetAddress());
28         InputStream in = socket.getInputStream();//从数据包中读取数据输入流
29         //把字节流转换成字符流
30         InputStreamReader isr = new InputStreamReader(in);//字节流转换为字符流
31         //构造缓冲字符流来读取文本数据。好处是可以识别换行符
32         BufferedReader reader = new BufferedReader(isr);
33         String s;
34         while((s=reader.readLine())!=null){
35             System.out.println("我是服务端,我接收到的数据是:"+s);
36         }
37     }
38 }

 

posted @ 2019-04-08 17:32  五柳先生柳三变  阅读(125)  评论(0编辑  收藏  举报