黑马程序员----网络编程

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

 

 

一.IP地址

每个设备在网络中的唯一标识

    每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。

    ipconfig:查看本机IP

    ping:测试连接

    本地回路地址:127.0.0.1255.255.255.255是广播地址

    IPv4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽。

    IPv6:8组,每组4个16进制数。

    1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f

    1a2b::aaaa:0000:0000:0000:aabb:1f2f

    1a2b:0000:aaaa::aabb:1f2f

    1a2b:0000:aaaa::0000:aabb:1f2f

    1a2b:0000:aaaa:0000::aabb:1f2f

二.端口号

每个程序在设备上的唯一标识

    每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。

    端口号范围从0-65535

    编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。

    常用端口

    mysql: 3306

    oracle: 1521

    web: 80

    tomcat: 8080

    QQ: 4000

    feiQ: 2425

三.网络协议

为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

    UDP

    面向无连接,数据不安全,速度快。不区分客户端与服务端。

    TCP

      面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。

    三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据

四.Socket

通信的两端都有Socket。

    网络通信其实就是Socket间的通信。

    数据在两个Socket间通过IO流传输。

    Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。

五.UDP传输

    1.发送

    创建DatagramSocket, 随机端口号

    创建DatagramPacket, 指定数据, 长度, 地址, 端口

    使用DatagramSocket发送DatagramPacket

    关闭DatagramSocket

    2.接收

    创建DatagramSocket, 指定端口号

    创建DatagramPacket, 指定数组, 长度

    使用DatagramSocket接收DatagramPacket

    关闭DatagramSocket

    从DatagramPacket中获取数据

    3.接收方获取ip和端口号

    String ip =packet.getAddress().getHostAddress();

    int port = packet.getPort();

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.net.DatagramPacket;  
  3. import java.net.DatagramSocket;  
  4. import java.net.InetAddress;  
  5. import java.net.SocketException;  
  6. import java.util.Scanner;  
  7.   
  8. public class Demo2_Send {  
  9.   
  10.     /** 
  11.      * 1.发送 创建DatagramSocket, 随机端口号 创建DatagramPacket, 指定数据, 长度, 地址, 端口 
  12.      * 使用DatagramSocket发送DatagramPacket 关闭DatagramSocket 
  13.      *  
  14.      * @throws IOException 
  15.      */  
  16.     public static void main(String[] args) throws IOException {  
  17.         // String str = "我读书少,你不要骗我";  
  18.         DatagramSocket socket = new DatagramSocket(); // 创建Socket对象,相当于创建码头  
  19.         Scanner sc = new Scanner(System.in);  
  20.         while (true) {  
  21.             String line = sc.nextLine();  
  22.             if("quit".equals(line))  
  23.                 break;  
  24.             DatagramPacket packet = // 创建Packet对象,相当于创建集装箱  
  25.             new DatagramPacket(line.getBytes(), line.getBytes().length,InetAddress.getByName("127.0.0.1"), 6666);  
  26.             socket.send(packet); // 发送集装箱  
  27.         }  
  28.         socket.close();  
  29.     }  
  30.   
  31. }  

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.net.DatagramPacket;  
  3. import java.net.DatagramSocket;  
  4. import java.net.SocketException;  
  5.   
  6. public class Demo2_Receive {  
  7.   
  8.     /** 
  9.      * 2.接收 
  10.         创建DatagramSocket, 指定端口号 
  11.         创建DatagramPacket, 指定数组, 长度 
  12.         使用DatagramSocket接收DatagramPacket 
  13.         关闭DatagramSocket 
  14.         从DatagramPacket中获取数据 
  15.      * @throws IOException  
  16.      */  
  17.     public static void main(String[] args) throws IOException {  
  18.         DatagramSocket socket = new DatagramSocket(6666);   //创建Socket对象,相当于创建码头  
  19.         DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);//创建Packet对象,相当于创建集装箱接货  
  20.         while(true) {  
  21.             socket.receive(packet);                                         //接收数据  
  22.             byte[] arr = packet.getData();                                  //获取数据  
  23.             int len = packet.getLength();                                   //获取有效的字节个数  
  24.             String ip = packet.getAddress().getHostAddress();       //获取ip地址  
  25.             System.out.println(ip + ":" + new String(arr,0,len));  
  26.         }  
  27.     }  
  28.   
  29. }  


多线程

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.net.DatagramPacket;  
  3. import java.net.DatagramSocket;  
  4. import java.net.InetAddress;  
  5. import java.net.SocketException;  
  6. import java.net.UnknownHostException;  
  7. import java.util.Scanner;  
  8.   
  9. public class Demo3_MoreThread {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         new Receive().start();  
  16.         new Send().start();  
  17.     }  
  18.   
  19. }  
  20.   
  21. class Receive extends Thread {  
  22.     public void run() {  
  23.         try {  
  24.             DatagramSocket socket = new DatagramSocket(6666);   //创建Socket对象,相当于创建码头  
  25.             DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);//创建Packet对象,相当于创建集装箱接货  
  26.             while(true) {  
  27.                 socket.receive(packet);                                         //接收数据  
  28.                 byte[] arr = packet.getData();                                  //获取数据  
  29.                 int len = packet.getLength();                                   //获取有效的字节个数  
  30.                 String ip = packet.getAddress().getHostAddress();       //获取ip地址  
  31.                 System.out.println(ip + ":" + new String(arr,0,len));  
  32.             }  
  33.         } catch (Exception e) {  
  34.               
  35.             e.printStackTrace();  
  36.         }   
  37.     }  
  38. }  
  39.   
  40. class Send extends Thread {  
  41.     public void run() {  
  42.         try {  
  43.             DatagramSocket socket = new DatagramSocket(); // 创建Socket对象,相当于创建码头  
  44.             Scanner sc = new Scanner(System.in);  
  45.             while (true) {  
  46.                 String line = sc.nextLine();  
  47.                 if("quit".equals(line))  
  48.                     break;  
  49.                 DatagramPacket packet = // 创建Packet对象,相当于创建集装箱  
  50.                 new DatagramPacket(line.getBytes(), line.getBytes().length,InetAddress.getByName("192.168.33.186"), 6666);  
  51.                 socket.send(packet); // 发送集装箱  
  52.             }  
  53.             socket.close();  
  54.         } catch (Exception e) {  
  55.               
  56.             e.printStackTrace();  
  57.         }   
  58.     }  
  59. }  

六.TCP传输

1.客户端

       创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器

       调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流

       输入流可以读取服务端输出流写出的数据

       输出流可以写出数据到服务端的输入流


[java]  view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.io.InputStreamReader;  
  6. import java.io.OutputStream;  
  7. import java.io.OutputStreamWriter;  
  8. import java.io.PrintStream;  
  9. import java.net.Socket;  
  10. import java.net.UnknownHostException;  
  11.   
  12. public class Demo2_Client {  
  13.   
  14.     /** 
  15.      *1.客户端 
  16.         创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器 
  17.         调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流 
  18.         输入流可以读取服务端输出流写出的数据 
  19.         输出流可以写出数据到服务端的输入流 
  20.      * @throws Exception  
  21.      * @throws UnknownHostException  
  22.      */  
  23.     public static void main(String[] args) throws Exception {  
  24.         Socket socket = new Socket("127.0.0.1"12345);     //创建客户端  
  25.         /*InputStream is = socket.getInputStream();         //获取输入流 
  26.         OutputStream os = socket.getOutputStream();         //获取输出流 
  27.          
  28.         byte[] arr = new byte[1024]; 
  29.         int len = is.read(arr);                     //读取服务器发送的数据 
  30.         System.out.println(new String(arr,0,len)); 
  31.          
  32.         os.write("学习挖掘机哪家强".getBytes());            //将数据写给服务器 
  33. */        
  34.         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//包装字节输入流  
  35.         //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));  
  36.         PrintStream ps = new PrintStream(socket.getOutputStream());//包装字节输出流  
  37.         System.out.println(br.readLine());              //读取服务器写过来的内容  
  38.         ps.println("我要报名就业班");                      //将数据写给服务器  
  39.         System.out.println(br.readLine())  
  40.         ps.println("不学了");  
  41.         //bw.write("我要报名就业班");  
  42.         socket.close();  
  43.     }  
  44.   
  45. }  

2.服务端

       创建ServerSocket(需要指定端口号)

       调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket

       调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流

       输入流可以读取客户端输出流写出的数据

       输出流可以写出数据到客户端的输入流

[java]  view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.io.InputStreamReader;  
  6. import java.io.OutputStream;  
  7. import java.io.OutputStreamWriter;  
  8. import java.io.PrintStream;  
  9. import java.net.ServerSocket;  
  10. import java.net.Socket;  
  11.   
  12. public class Demo2_Server {  
  13.   
  14.     /** 
  15.      * 2.服务端 
  16.         创建ServerSocket(需要指定端口号) 
  17.         调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket 
  18.         调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流 
  19.         输入流可以读取客户端输出流写出的数据 
  20.         输出流可以写出数据到客户端的输入流 
  21.      * @throws Exception  
  22.      */  
  23.     public static void main(String[] args) throws Exception {  
  24.         ServerSocket server = new ServerSocket(54321);          //创建服务端,绑定54321端口  
  25.         Socket socket = server.accept();                        //接受客户端请求  
  26.         /*InputStream is = socket.getInputStream();             //获取字节输入流 
  27.         OutputStream os = socket.getOutputStream();             //获取字节输出流 
  28.          
  29.         os.write("百度一下你就知道".getBytes());                //将内容写给客户端 
  30.          
  31.         byte[] arr = new byte[1024]; 
  32.         int len = is.read(arr);                         //从客户端读取数据 
  33.         System.out.println(new String(arr,0,len));              */  
  34.         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//包装字节输入流  
  35.         //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));  
  36.           
  37.         //bw.write("欢迎咨询传智播客");  
  38.         PrintStream ps = new PrintStream(socket.getOutputStream());//包装字节输出流,因为里面有一个println的方法  
  39.         ps.println("欢迎咨询传智播客");                     //将字符串写到客户端  
  40.         System.out.println(br.readLine());              //读取客户端发过来的信息  
  41.         ps.println("报满了,等下一期吧");  
  42.         System.out.println(br.readLine());  
  43.         server.close();  
  44.         socket.close();  
  45.     }  
  46.   
  47. }  

创建多线程的服务端,可以不断的向服务端访问

 

[java]  view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4. import java.io.PrintStream;  
  5. import java.net.ServerSocket;  
  6. import java.net.Socket;  
  7.   
  8. public class Demo3_MoreThread {  
  9.   
  10.     /** 
  11.      * @param args 
  12.      * @throws IOException  
  13.      */  
  14.     public static void main(String[] args) throws IOException {  
  15.         ServerSocket server = new ServerSocket(12345);  
  16.         while(true) {  
  17.             final Socket socket = server.accept();          //不断的接收客户端的请求  
  18.             new Thread() {  
  19.                 public void run() {  
  20.                     try {  
  21.                         BufferedReader br =   
  22.                         new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  23.                         PrintStream ps = new PrintStream(socket.getOutputStream());  
  24.                           
  25.                         ps.println("欢迎咨询黑马程序员");  
  26.                         System.out.println(br.readLine());  
  27.                         ps.println("不一万就业不给一分钱");  
  28.                         System.out.println(br.readLine());  
  29.                         ps.println("不学拉到");  
  30.                         socket.close();  
  31.                     } catch (Exception e) {  
  32.                           
  33.                         e.printStackTrace();  
  34.                     }  
  35.                 }  
  36.             }.start();  
  37.         }  
  38.     }  
  39. }

    编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。

    常用端口

    mysql: 3306

    oracle: 1521

    web: 80

    tomcat: 8080

    QQ: 4000

    feiQ: 2425

三.网络协议

为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

    UDP

    面向无连接,数据不安全,速度快。不区分客户端与服务端。

    TCP

      面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。

    三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据

四.Socket

通信的两端都有Socket。

    网络通信其实就是Socket间的通信。

    数据在两个Socket间通过IO流传输。

    Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。

五.UDP传输

    1.发送

    创建DatagramSocket, 随机端口号

    创建DatagramPacket, 指定数据, 长度, 地址, 端口

    使用DatagramSocket发送DatagramPacket

    关闭DatagramSocket

    2.接收

    创建DatagramSocket, 指定端口号

    创建DatagramPacket, 指定数组, 长度

    使用DatagramSocket接收DatagramPacket

    关闭DatagramSocket

    从DatagramPacket中获取数据

    3.接收方获取ip和端口号

    String ip =packet.getAddress().getHostAddress();

    int port = packet.getPort();

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.net.DatagramPacket;  
  3. import java.net.DatagramSocket;  
  4. import java.net.InetAddress;  
  5. import java.net.SocketException;  
  6. import java.util.Scanner;  
  7.   
  8. public class Demo2_Send {  
  9.   
  10.     /** 
  11.      * 1.发送 创建DatagramSocket, 随机端口号 创建DatagramPacket, 指定数据, 长度, 地址, 端口 
  12.      * 使用DatagramSocket发送DatagramPacket 关闭DatagramSocket 
  13.      *  
  14.      * @throws IOException 
  15.      */  
  16.     public static void main(String[] args) throws IOException {  
  17.         // String str = "我读书少,你不要骗我";  
  18.         DatagramSocket socket = new DatagramSocket(); // 创建Socket对象,相当于创建码头  
  19.         Scanner sc = new Scanner(System.in);  
  20.         while (true) {  
  21.             String line = sc.nextLine();  
  22.             if("quit".equals(line))  
  23.                 break;  
  24.             DatagramPacket packet = // 创建Packet对象,相当于创建集装箱  
  25.             new DatagramPacket(line.getBytes(), line.getBytes().length,InetAddress.getByName("127.0.0.1"), 6666);  
  26.             socket.send(packet); // 发送集装箱  
  27.         }  
  28.         socket.close();  
  29.     }  
  30.   
  31. }  

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.net.DatagramPacket;  
  3. import java.net.DatagramSocket;  
  4. import java.net.SocketException;  
  5.   
  6. public class Demo2_Receive {  
  7.   
  8.     /** 
  9.      * 2.接收 
  10.         创建DatagramSocket, 指定端口号 
  11.         创建DatagramPacket, 指定数组, 长度 
  12.         使用DatagramSocket接收DatagramPacket 
  13.         关闭DatagramSocket 
  14.         从DatagramPacket中获取数据 
  15.      * @throws IOException  
  16.      */  
  17.     public static void main(String[] args) throws IOException {  
  18.         DatagramSocket socket = new DatagramSocket(6666);   //创建Socket对象,相当于创建码头  
  19.         DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);//创建Packet对象,相当于创建集装箱接货  
  20.         while(true) {  
  21.             socket.receive(packet);                                         //接收数据  
  22.             byte[] arr = packet.getData();                                  //获取数据  
  23.             int len = packet.getLength();                                   //获取有效的字节个数  
  24.             String ip = packet.getAddress().getHostAddress();       //获取ip地址  
  25.             System.out.println(ip + ":" + new String(arr,0,len));  
  26.         }  
  27.     }  
  28.   
  29. }  


多线程

[java]  view plain copy
  1. import java.io.IOException;  
  2. import java.net.DatagramPacket;  
  3. import java.net.DatagramSocket;  
  4. import java.net.InetAddress;  
  5. import java.net.SocketException;  
  6. import java.net.UnknownHostException;  
  7. import java.util.Scanner;  
  8.   
  9. public class Demo3_MoreThread {  
  10.   
  11.     /** 
  12.      * @param args 
  13.      */  
  14.     public static void main(String[] args) {  
  15.         new Receive().start();  
  16.         new Send().start();  
  17.     }  
  18.   
  19. }  
  20.   
  21. class Receive extends Thread {  
  22.     public void run() {  
  23.         try {  
  24.             DatagramSocket socket = new DatagramSocket(6666);   //创建Socket对象,相当于创建码头  
  25.             DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);//创建Packet对象,相当于创建集装箱接货  
  26.             while(true) {  
  27.                 socket.receive(packet);                                         //接收数据  
  28.                 byte[] arr = packet.getData();                                  //获取数据  
  29.                 int len = packet.getLength();                                   //获取有效的字节个数  
  30.                 String ip = packet.getAddress().getHostAddress();       //获取ip地址  
  31.                 System.out.println(ip + ":" + new String(arr,0,len));  
  32.             }  
  33.         } catch (Exception e) {  
  34.               
  35.             e.printStackTrace();  
  36.         }   
  37.     }  
  38. }  
  39.   
  40. class Send extends Thread {  
  41.     public void run() {  
  42.         try {  
  43.             DatagramSocket socket = new DatagramSocket(); // 创建Socket对象,相当于创建码头  
  44.             Scanner sc = new Scanner(System.in);  
  45.             while (true) {  
  46.                 String line = sc.nextLine();  
  47.                 if("quit".equals(line))  
  48.                     break;  
  49.                 DatagramPacket packet = // 创建Packet对象,相当于创建集装箱  
  50.                 new DatagramPacket(line.getBytes(), line.getBytes().length,InetAddress.getByName("192.168.33.186"), 6666);  
  51.                 socket.send(packet); // 发送集装箱  
  52.             }  
  53.             socket.close();  
  54.         } catch (Exception e) {  
  55.               
  56.             e.printStackTrace();  
  57.         }   
  58.     }  
  59. }  

六.TCP传输

1.客户端

       创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器

       调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流

       输入流可以读取服务端输出流写出的数据

       输出流可以写出数据到服务端的输入流


[java]  view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.io.InputStreamReader;  
  6. import java.io.OutputStream;  
  7. import java.io.OutputStreamWriter;  
  8. import java.io.PrintStream;  
  9. import java.net.Socket;  
  10. import java.net.UnknownHostException;  
  11.   
  12. public class Demo2_Client {  
  13.   
  14.     /** 
  15.      *1.客户端 
  16.         创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器 
  17.         调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流 
  18.         输入流可以读取服务端输出流写出的数据 
  19.         输出流可以写出数据到服务端的输入流 
  20.      * @throws Exception  
  21.      * @throws UnknownHostException  
  22.      */  
  23.     public static void main(String[] args) throws Exception {  
  24.         Socket socket = new Socket("127.0.0.1"12345);     //创建客户端  
  25.         /*InputStream is = socket.getInputStream();         //获取输入流 
  26.         OutputStream os = socket.getOutputStream();         //获取输出流 
  27.          
  28.         byte[] arr = new byte[1024]; 
  29.         int len = is.read(arr);                     //读取服务器发送的数据 
  30.         System.out.println(new String(arr,0,len)); 
  31.          
  32.         os.write("学习挖掘机哪家强".getBytes());            //将数据写给服务器 
  33. */        
  34.         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//包装字节输入流  
  35.         //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));  
  36.         PrintStream ps = new PrintStream(socket.getOutputStream());//包装字节输出流  
  37.         System.out.println(br.readLine());              //读取服务器写过来的内容  
  38.         ps.println("我要报名就业班");                      //将数据写给服务器  
  39.         System.out.println(br.readLine())  
  40.         ps.println("不学了");  
  41.         //bw.write("我要报名就业班");  
  42.         socket.close();  
  43.     }  
  44.   
  45. }  

2.服务端

       创建ServerSocket(需要指定端口号)

       调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket

       调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流

       输入流可以读取客户端输出流写出的数据

       输出流可以写出数据到客户端的输入流

[java]  view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5. import java.io.InputStreamReader;  
  6. import java.io.OutputStream;  
  7. import java.io.OutputStreamWriter;  
  8. import java.io.PrintStream;  
  9. import java.net.ServerSocket;  
  10. import java.net.Socket;  
  11.   
  12. public class Demo2_Server {  
  13.   
  14.     /** 
  15.      * 2.服务端 
  16.         创建ServerSocket(需要指定端口号) 
  17.         调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket 
  18.         调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流 
  19.         输入流可以读取客户端输出流写出的数据 
  20.         输出流可以写出数据到客户端的输入流 
  21.      * @throws Exception  
  22.      */  
  23.     public static void main(String[] args) throws Exception {  
  24.         ServerSocket server = new ServerSocket(54321);          //创建服务端,绑定54321端口  
  25.         Socket socket = server.accept();                        //接受客户端请求  
  26.         /*InputStream is = socket.getInputStream();             //获取字节输入流 
  27.         OutputStream os = socket.getOutputStream();             //获取字节输出流 
  28.          
  29.         os.write("百度一下你就知道".getBytes());                //将内容写给客户端 
  30.          
  31.         byte[] arr = new byte[1024]; 
  32.         int len = is.read(arr);                         //从客户端读取数据 
  33.         System.out.println(new String(arr,0,len));              */  
  34.         BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));//包装字节输入流  
  35.         //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));  
  36.           
  37.         //bw.write("欢迎咨询传智播客");  
  38.         PrintStream ps = new PrintStream(socket.getOutputStream());//包装字节输出流,因为里面有一个println的方法  
  39.         ps.println("欢迎咨询传智播客");                     //将字符串写到客户端  
  40.         System.out.println(br.readLine());              //读取客户端发过来的信息  
  41.         ps.println("报满了,等下一期吧");  
  42.         System.out.println(br.readLine());  
  43.         server.close();  
  44.         socket.close();  
  45.     }  
  46.   
  47. }  

创建多线程的服务端,可以不断的向服务端访问

 

[java]  view plain copy
  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4. import java.io.PrintStream;  
  5. import java.net.ServerSocket;  
  6. import java.net.Socket;  
  7.   
  8. public class Demo3_MoreThread {  
  9.   
  10.     /** 
  11.      * @param args 
  12.      * @throws IOException  
  13.      */  
  14.     public static void main(String[] args) throws IOException {  
  15.         ServerSocket server = new ServerSocket(12345);  
  16.         while(true) {  
  17.             final Socket socket = server.accept();          //不断的接收客户端的请求  
  18.             new Thread() {  
  19.                 public void run() {  
  20.                     try {  
  21.                         BufferedReader br =   
  22.                         new BufferedReader(new InputStreamReader(socket.getInputStream()));  
  23.                         PrintStream ps = new PrintStream(socket.getOutputStream());  
  24.                           
  25.                         ps.println("欢迎咨询黑马程序员");  
  26.                         System.out.println(br.readLine());  
  27.                         ps.println("不一万就业不给一分钱");  
  28.                         System.out.println(br.readLine());  
  29.                         ps.println("不学拉到");  
  30.                         socket.close();  
  31.                     } catch (Exception e) {  
  32.                           
  33.                         e.printStackTrace();  
  34.                     }  
  35.                 }  
  36.             }.start();  
  37.         }  
  38.     }  
  39.   
  40. }  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值