首页 > 其他分享 >网络基础及使用socket进行cs通信

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

时间:2022-08-31 22:48:05浏览次数:73  
标签:socket 通信 客户端 reader cs close null out

视频参考: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();
          }
      }

  }
}
 

标签:socket,通信,客户端,reader,cs,close,null,out
From: https://www.cnblogs.com/mokuiran/p/16644778.html

相关文章

  • 简单的Css动画---边框线条动画
    <!DOCTYPEhtml><htmllang="en"><head>  <metacharset="UTF-8">  <metahttp-equiv="X-UA-Compatible"content="IE=edge">  <metaname="viewport"c......
  • hzx的CSP-J模拟赛题解
    T1按题意模拟即可,注意不用考虑闰年。T2\(30\%\)的数据:使用\(Floyd\)求出图的全源最短路,时间复杂度\(O(n^3)\)。\(50\%\)的数据:对图上每个点使用\(Dijkstra\)求......
  • NO.6 HTML+CSS 笔记
    第一节1、HTML+CSS是两门语言,联合起来可以开发网页2、HTML+CSS+JavaScript=网页3、HTML:超文本标记语言:定义网页中有哪些内容4、CSS:层叠样式表:定义网页中的东西......
  • 前端——CSS
    CSS 指的是层叠样式表 (Cascading Style Sheets)述了如何在屏幕、纸张或其他媒体上显示HTML元素节省了大量工作。它可以同时控制多张网页的布局 CSS语法 C......
  • elasticsearch启动失败
    elasticsearch启动失败修改elasticsearch.ymlxpack.security.enabled:false//关闭密码验证xpack.security.enrollment.enabled:false//关闭注册xpack.securi......
  • Qt之TCP通信笔记-发送端、接收端、客户端、服务端及write()、read()
    一、QtTCP通信接收端(read()):1.从发射newConnection()信号开始(当有新的TCP连接,会发射newConnection()信号);2.当QTcpSocket缓存接收到新的数据时发射readyRead信号;3.连......
  • Java实现greenplum数据库中csv文件的导入和导出
    Java实现greenplum数据库中csv文件的导入和导出背景:greenplum数据库是在开源的PostgreSQL的基础上采用MPP架构实现的关系型分布式数据库,在使用greenplum数据库进行开发的......
  • webpack css-loader模块化导致的antd样式不好用解决方案
    css-loader模块化会导致antd样式文件无效,解决的方式就是排除node_modules下的目标文件就可以如果你用的less就可以按以下方式来配置{test:/\.less$/,inclu......
  • Elasticsearch 快照与恢复-快照仓库 repository
    Elasticsearch中的一个快照即一个运行时的集群备份。快照能在以下场景使用。不停机的情况下周期性的备份集群。数据被删除或者硬盘故障的情况下还原数据在集群之间传......
  • HTML入门2(学习Head First HTML与CSS 第2版)
    <a>元素的内容会成为Web页面中可单击的文本。href属性告诉浏览器链接的目标文件。<ahref="链接地址">链接名称</a>1.一个页面链接到另一个页面,要使用<a>标签。2.<a>元......