• 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 }

    结果:

  • 相关阅读:
    正经学C#_循环[do while,while,for]:[c#入门经典]
    Vs 控件错位 右侧资源管理器文件夹点击也不管用,显示异常
    asp.net core 获取当前请求的url
    在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be
    用orchard core和asp.net core 3.0 快速搭建博客,解决iis 部署https无法登录后台问题
    System.Data.Entity.Core.EntityCommandExecution The data reader is incompatible with the specified
    初探Java设计模式3:行为型模式(策略,观察者等)
    MySQL教程77-CROSS JOIN 交叉连接
    MySQL教程76-HAVING 过滤分组
    MySQL教程75-使用GROUP BY分组查询
  • 原文地址:https://www.cnblogs.com/dabu/p/12513402.html
Copyright © 2020-2023  润新知