网络基础及使用socket进行cs通信

视频参考:https://www.bilibili.com/video/BV114411W7id?p=61&spm_id_from=pageDriver&vd_source=cb0d3da7202ac90dd1d32ce6960fb3b7

网络

两台计算机通过协议和网络进行通信

IP地址:网络上的唯一标识。

IP的组成:32位,由4个8位二进制组成(每一位最大值是255,每一位十进制标识 0-255),但由于过长,不好记,则改为十进制,如:192.168.1.1。

协议:为了让网络中不同计算机之间能够相互通信而建立的规则、标椎、约定。例如:

  • TCP协议:面向连接的、可靠的(不丢失、不重复、有序)、基于字节流的传输通信协议。

  • UDP协议:无连接的协议。在传输数据之间,客户端和服务端之间不建立和维护连接。提供不可靠的数据传输。

     

socket(套接字):基于TCP协议的网络通信,可以提供双向安全连接的网路通信。socket需要借助数据流来完成数据的传递工作。

 

 

可见:发送数据,OutputStream

接收数据:InputStream

传输数据的步骤:

  1. 客户端建立连接,服务端准备服务

  2. 通过Socket生成InputStream和OutputStream(准备发送数据)

  3. 使用InputStream和OutputStream进行发送、接收数据

  4. 关闭InputStream和OutputStream、socket

服务端代码:

package com.mokuiran.socket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class MyServer {
   public static void main(String[] args) {
       ServerSocket serverSocket = null;
       Socket socket = null;
       InputStream in = null;
       BufferedReader reader = null;
       OutputStream out = null;

       try {
           // 1. 准备服务,ip默认本机127.0.0.1,端口8080
           serverSocket = new ServerSocket(8888);
           //准备完毕,可以监听客户端请求
           socket = serverSocket.accept();//一直阻塞,直到有客户端连接
           System.out.println("服务端检测到客户端连接成功!");

//           2. 通过Socket生成InputStream和OutputStream(准备发送数据)
           in = socket.getInputStream();//字节流
           //带缓冲区的字符流,将字节流转换为效率更高的字符流
           reader = new BufferedReader(new InputStreamReader(in));
           String info = null;
           while ((info = reader.readLine()) != null){
               System.out.println("i am server,接收到客户端信息是:"+info);
          }
           socket.shutdownInput();

//           服务端做出反馈
           out = socket.getOutputStream();
           out.write("welcome client...".getBytes());
           socket.shutdownOutput();
      } catch (IOException e) {
           e.printStackTrace();
      }finally {
           try {
              if (out!=null) out.close();
               if (reader!=null) reader.close();
               if (in!=null) in.close();
               if (socket!=null) socket.close();
               if (serverSocket!=null) serverSocket.close();
          } catch (IOException e) {
               e.printStackTrace();
          }
      }

  }
}

客户端代码:

package com.mokuiran.socket;

import java.io.*;
import java.net.Socket;
//客户端
public class MyClient {
   public static void main(String[] args) {

       Socket socket = null;
       OutputStream out = null;
       InputStream in = null;
       BufferedReader reader = null;


       try {
            socket = new Socket("127.0.0.1",8888);
           System.out.println("客户端连接成功!!");
            out = socket.getOutputStream();
           out.write("hello server".getBytes());//发送消息
           socket.shutdownOutput();

           //接收服务端的反馈
           in = socket.getInputStream();
           reader = new BufferedReader(new InputStreamReader(in));

           String info = null;
           while ((info = reader.readLine()) != null){
               System.out.println("i am client,接收到的服务器端消息:"+info);
          }
           socket.shutdownInput();
      } catch (IOException e) {
           e.printStackTrace();
      } finally {
           try {
               if (reader != null) reader.close();
               if (in != null) in.close();
               if (out != null) out.close();
               if (socket != null) socket.close();
          } catch (IOException e) {
               e.printStackTrace();
          }
      }

  }
}
 
posted @   默夔然  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示