zoukankan      html  css  js  c++  java
  • Day 22:网络编程(3)

    TCP通讯协议特点:
       1. tcp是基于IO流进行数据 的传输的,面向连接。
       2. tcp进行数据传输的时候是没有大小限制的。
       3. tcp是面向连接,通过三次握手的机制保证数据的完整性。可靠协议。
       4. tcp是面向连接的,所以速度慢。
       5. tcp是区分客户端与服务端的。

    tcp协议下的Socket:
       Socket(客户端) , tcp的客户端一旦启动马上要与服务端进行连接。
       ServerSocket(服务端类)
     
    tcp的客户端使用步骤:
       1. 建立tcp的客户端服务。
       2. 获取到对应的流对象。
       3.写出或读取数据
       4. 关闭资源。
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    
    public class Demo1 {
        public static void main(String[] args) throws IOException {
            Socket socket = new Socket(InetAddress.getLocalHost(),9090);
            OutputStream a = socket.getOutputStream();
            a.write("客户端说 :".getBytes());
            socket.close();
        }
    }
     
    tcp的服务端使用步骤
       java.net.BindException:   端口被占用。
      ServerSocket的使用 步骤
         1. 建立tcp服务端的服务。
         2. 接受客户端的连接产生一个Socket.
         3. 获取对应的流对象读取或者写出数据。
         4. 关闭资源。
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Demo2 {
        public static void main(String[] args) throws IOException {
            ServerSocket socket = new ServerSocket(9090);
            Socket s = socket.accept();
            InputStream b = s.getInputStream();
            byte[] buf = new byte[1024];
            int length = 0;
            length = b.read(buf);
            System.out.println("服务端接收:"+ new String(buf,0,length));
            
            OutputStream outputStream = s.getOutputStream();
            outputStream.write("客户端你好啊!".getBytes());
            
            socket.close();
        }
    }

     需求: 客户端与服务端一问一答聊天。
     
     1.如果使用BuffrerdReader的readline方法一定要加上 才把数据写出。
     2.使用字符流一定要调用flush方法数据才会写出。

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.InetAddress;
    import java.net.Socket;
    
    public class Demo4 {
    
        public static void main(String[] args) throws IOException {
            Socket socket = new Socket(InetAddress.getLocalHost(),9090);
            OutputStreamWriter socketOut =    new OutputStreamWriter(socket.getOutputStream());
            BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));
            
            String line = null;
            while((line = keyReader.readLine())!=null){
                
                socketOut.write(line+"
    ");
                socketOut.flush();
                
                line = socketReader.readLine();
                System.out.println("服务端回送的数据是:"+line);
            }
            socket.close();
        }
    }
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Demo5 {
    
        public static void main(String[] args) throws IOException {
    
            ServerSocket serverSocket = new ServerSocket(9090);
            Socket socket = serverSocket.accept();
            BufferedReader socketReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            OutputStreamWriter socketOut =  new OutputStreamWriter(socket.getOutputStream());
            BufferedReader keyReader = new BufferedReader(new InputStreamReader(System.in));
    
            String line = null;
            while((line = socketReader.readLine())!=null){
                System.out.println("服务端接收到的数据:"+ line);
                System.out.println("输入发给客户端的数据:");
                line = keyReader.readLine();
                socketOut.write(line+"
    ");
                socketOut.flush();
            }
            serverSocket.close();
        }
    }

     模拟Tomcat

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Demo6 {
        public static void main(String[] args) throws IOException {
            ServerSocket serversocket = new ServerSocket(9090);
            Socket socket = serversocket.accept();
            OutputStream outputStream= socket.getOutputStream();
            outputStream.write("nihao".getBytes());
            serversocket.close();    
        }
    }

    运行服务器

     

    查询本机ip

    在浏览器输入IP和端口

    因为没有标签所以浏览器不承认这是个网页

     但是服务器已经停止

    该段代码只可以被一个人访问,多线程可以让多人访问如下:

    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class Demo6 extends Thread{
        Socket socket;
        public Demo6(Socket socket) {
            // TODO Auto-generated constructor stub
            this.socket = socket;
        }
        
        public void run() {
            try {
                OutputStream outputStream= socket.getOutputStream();
                outputStream.write("<html><head><title></title><body>小姐姐,么么哒!</body></head></html>".getBytes());
                socket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }    
        }
        
        public static void main(String[] args) throws IOException {
            ServerSocket serversocket = new ServerSocket(9090);
            while(true) {
                Socket socket = serversocket.accept();
                new Demo6(socket).start();
            }
        }
    }

     
     
  • 相关阅读:
    模板的一些概念和技巧
    [转] Linux TCP/IP网络小课堂:net-tools与iproute2大比较
    [转] boost库的Singleton的实现以及static成员的初始化问题
    static对象的高级用法
    const中的一些tricky的地方
    delphi软件启动的顺序解密。
    属性名、变量名与 内部关键字 重名 加&
    delphi Inc函数和Dec函数的用法
    Centos 关闭防火墙
    IntelliJ IDEA 启动方法
  • 原文地址:https://www.cnblogs.com/JYDesigner/p/9436358.html
Copyright © 2011-2022 走看看