zoukankan      html  css  js  c++  java
  • socket编程浅知识

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

    结果:

  • 相关阅读:
    如何参与linux 内核开发
    绘制dot 图
    GITHUB 提交错误 Error: Permission denied (publickey) 解决
    atomic_read
    linux 获取cpu 个数
    【转】 管理CPU 亲和性
    【转】 申请对齐某种结构体大小的buffer
    WePY框架开发的小程序中使用 echarts折线图
    vue + css3 实现主题色切换
    vue 中 const { x } = this 的用法
  • 原文地址:https://www.cnblogs.com/dabu/p/12513402.html
Copyright © 2011-2022 走看看