zoukankan      html  css  js  c++  java
  • 3.19Java基础知识:Socket编程全部,TCPIP

    Socket编程全部,TCP/IP

    一、TCP/IP 通信通信,必须要有IP地址,必须要有相同的套接字(socket)
    步骤:
    1、寻址定位:
    通过IP地址 找到主机
    通过port (端口号)(0-65535) 找到程序
    查看主机的端口号:cmd netstat -ano
    SQL 端口号:3306
    我们自己的:8080之后
    本机IP 127.0.0.1


    2、通信(协议)
    TCP/IP包含:
    TCP 可靠(三次握手)B是否能接收,B是否接收到,B返回信息给A
    TUP 不可靠,无状态,速度快,视频一般用这种


    二、套接字 socket
    socket 应用程序访问TCP/IP 的调用

    socket编程:
    ①、服务器端:
    1、建立服务端某一个端口监听
    ServerSocket server = new ServerSocket(8080);
    2、准备解释客服端请求:等待-准备
    Socket socket = server.accept();
    3、创建输入流:
    BufferedReader br = new Buff..(new InputS..R..(socket.getInputStream));
    PrintWriter pw = new PrintWriter(Socket.getOutputStream(),true);
    4、关闭流,关闭socket,关闭server
    br.close();socket.close();pw.colse();

    ②、客服端:少了第一步ServerSocket
    1、向服务器发请求
    Socket socket = new Socket("127.0.0.1",8080);
    2、创建输入输出流:
    BufferedReader br = new Bu..R..(new InputS..R(socket.getInputStream))
    3、关闭流,socket,server

    没有一直监听的:

     1 package com.socket;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.io.OutputStream;
     6 import java.net.Socket;
     7 import java.net.UnknownHostException;
     8 
     9 import javax.swing.JOptionPane;
    10 
    11 /**
    12  * Date: 2016-3-19-上午11:18:18
    13  * Class_name: Client.java
    14  * Package_name: com.lovo.demo_18
    15  * Author: ZhangYue
    16  * Description: 
    17  */
    18 public class Client {
    19     
    20     
    21     public Client(){
    22         try {
    23             
    24             String input_info = JOptionPane.showInputDialog(null,"请输入请求信息");
    25             
    26             Socket socket = new Socket("127.0.0.1", 8090);
    27             
    28             //客户端向服务器发送请求
    29             OutputStream out = socket.getOutputStream();
    30             out.write(input_info.getBytes());
    31             
    32             //客户端接收服务器的响应
    33             InputStream in = socket.getInputStream();
    34             byte [] b = new byte[1024];
    35             
    36             System.out.println(b.length);
    37             
    38             in.read(b);
    39             
    40             System.out.println("客户端接收到服务器端的响应信息:" + new String(b).trim());
    41             
    42             out.close();
    43             in.close();
    44             socket.close();
    45         } catch (UnknownHostException e) {
    46             // TODO Auto-generated catch block
    47             e.printStackTrace();
    48         } catch (IOException e) {
    49             // TODO Auto-generated catch block
    50             e.printStackTrace();
    51         }
    52     }
    53     
    54     
    55     public static void main(String[] args) {
    56         new Client();
    57     }
    58 
    59 }
    Client
     1 package com.socket;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.FileInputStream;
     5 import java.io.IOException;
     6 import java.io.InputStream;
     7 import java.io.InputStreamReader;
     8 import java.io.OutputStream;
     9 import java.net.ServerSocket;
    10 import java.net.Socket;
    11 
    12 /**
    13  * Date: 2016-3-19-上午11:10:15 Class_name: Server.java Package_name:
    14  * com.lovo.demo_18 Author: ZhangYue Description:
    15  */
    16 public class Server {
    17 
    18     public Server() {
    19 
    20         try {
    21             ServerSocket server = new ServerSocket(8090);
    22 
    23             System.out.println("服务器启动,等待客户端请求...");
    24 
    25 //            while (true) {
    26                 Socket socket = server.accept();// 监听客户端的请求
    27 
    28                 // 服务器接收客户端的请求
    29                 InputStream in = socket.getInputStream();
    30                 byte[] by = new byte[1024];
    31                 in.read(by);
    32                 
    33                 System.out.println("服务器端接收到了客户端的请求信息:" + new String(by).trim());
    34 
    35                 // 服务器响应信息返回给客户端
    36                 OutputStream out = socket.getOutputStream();
    37 
    38                 out.write("Hello".getBytes());
    39 
    40                 in.close();
    41                 out.close();
    42                 socket.close();
    43                 server.close();
    44 //            }
    45         } catch (IOException e) {
    46             e.printStackTrace();
    47         }
    48     }
    49 
    50     public static void main(String[] args) {
    51         new Server();
    52     }
    53 
    54 }
    Server

    服务器一直监听的:

     1 package com.soket.thread;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.io.OutputStream;
     6 import java.net.Socket;
     7 
     8 public class Client {
     9     
    10     public Client(){
    11         Socket socket = null;
    12         try {
    13             socket = new Socket("127.0.0.1",8088);
    14             InputStream in = socket.getInputStream();
    15             OutputStream out = socket.getOutputStream();
    16             
    17             String request = "Hello, I'm Client";
    18             
    19             out.write(request.getBytes());
    20             out.flush();
    21             System.out.println("客户端发送请求:" + request);
    22             
    23             byte[] by = new byte[1024];
    24             in.read(by);
    25             String str = new String(by).trim();
    26             System.out.println("客户端接收到服务器响应: " + str);
    27             
    28             
    29             out.close();
    30             in.close();
    31         } catch (IOException e) {
    32             e.printStackTrace();
    33         }finally{
    34             try {
    35                 socket.close();
    36             } catch (IOException e) {
    37                 e.printStackTrace();
    38             }
    39         }
    40     }
    41 
    42     /**
    43      * @param args
    44      */
    45     public static void main(String[] args) {
    46         // TODO Auto-generated method stub
    47         new Client();
    48     }
    49 
    50 }
    Client
     1 package com.soket.thread;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.io.OutputStream;
     6 import java.net.ServerSocket;
     7 import java.net.Socket;
     8 
     9 public class Server {
    10     public static boolean isRun = true;
    11     public Server(){
    12         try {
    13             ServerSocket s = new ServerSocket(8088);
    14             
    15             System.out.println("服务器启动,准备接收客户端请求...");
    16             
    17             while(true){//利用while循环设置服务器一直监听
    18                 Socket socket = s.accept();
    19                 /**
    20                  * 1. 利用线程,可支持多线程
    21                     new SocketThread(socket);
    22                 */
    23                 
    24                 /**
    25                  * 2. 直接书写在里面
    26                  * */
    27                 try {
    28                     InputStream in = socket.getInputStream();
    29                     OutputStream out = socket.getOutputStream();
    30                     
    31                     byte[] by = new byte[1024];
    32                     in.read(by);
    33                     String str = new String(by).trim();
    34                     System.out.println("服务器接收到客户端请求:" + str);
    35                     
    36                     out.write("Hello, I'm Server".getBytes());
    37                     
    38                     out.flush();
    39                     out.close();
    40                     in.close();
    41                 } catch (IOException e) {
    42                     e.printStackTrace();
    43                 }finally{
    44                     try {
    45                         socket.close();
    46                     } catch (IOException e) {
    47                         e.printStackTrace();
    48                     }
    49                 }
    50                 
    51             }
    52         } catch (IOException e) {
    53             e.printStackTrace();
    54         }
    55     }
    56 
    57     public static void main(String[] args) {
    58         Server s = new Server();
    59     }
    60 
    61 }
    Server

    加入线程的服务器:

     1 package com.soket.thread;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.io.OutputStream;
     6 import java.net.Socket;
     7 
     8 public class SocketThread extends Thread{
     9     private Socket socket;
    10     public SocketThread(Socket socket) {
    11         this.socket = socket;
    12         this.start();
    13     }
    14     @Override
    15     public void run() {
    16         try {
    17             InputStream in = socket.getInputStream();
    18             OutputStream out = socket.getOutputStream();
    19             
    20             byte[] by = new byte[1024];
    21             in.read(by);
    22             String str = new String(by).trim();
    23             System.out.println("服务器接收到客户端请求:" + str);
    24             
    25             out.write("Hello, I'm Server".getBytes());
    26             
    27             out.flush();
    28             out.close();
    29             in.close();
    30         } catch (IOException e) {
    31             e.printStackTrace();
    32         }finally{
    33             try {
    34                 socket.close();
    35             } catch (IOException e) {
    36                 e.printStackTrace();
    37             }
    38         }
    39     }
    40 
    41 }
    SocketThread
  • 相关阅读:
    Translation Rule 和命中法则
    Cisco Extension Mobility配置步骤详解
    tclsh命令, cisco 快速测试工具
    136、多继承的优缺点,作为一个开发者怎么看待多继承
    135、 虚函数的内存结构,那菱形继承的虚函数内存结构呢
    134、隐式转换,如何消除隐式转换?
    133、说一下你理解的 ifdef endif代表着什么?
    132、 静态成员与普通成员的区别是什么?
    131、全局变量和static变量的区别
    130、定义和声明的区别
  • 原文地址:https://www.cnblogs.com/chenyuanqiu2008/p/5308655.html
Copyright © 2011-2022 走看看