首页 > 编程语言 >java网络编程

java网络编程

时间:2022-08-24 21:59:43浏览次数:45  
标签:java Socket 编程 网络 TCP bw br new 客户端

网络编程是指编写运行在计算机的程序,这些设备都通过网络连接起来。要实现网络通信,我们要考虑几个问题:

1.如何建立两个节点(电脑)之间的网络连接?

2.如何向另外一个节点(电脑)发送信息?

3.如何从外部节点(电脑)接收一个请求并给预响应?

4.如何利用网络协议(TCP,UDP)?

 

解决上面的问题,我们需要先了解一些知识点:

1.每台电脑都有属于它自己的ip地址,用来方便电脑之间通信(ip地址是唯一的)

2.端口号:它决定我们电脑最多能同时启动多少个软件

3.端口:正在运行的程序的标识,它的范围是0-65535,想要知道这台电脑的哪个程序通信,使用ip+端口号. 

4.java.net 包中提供了两种常见的网络协议的支持:TCP和UDP协议

 

一、socket编程

java.net.Socket 类代表一个套接字

Socket原理是通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输(问题二)

实现:

套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。

当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。

二、TCP协议通信

TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议.

使用TCP协议实现通信,需要使用流式套接字。即客户端采用socket,而服务器端采用ServerSocket来完成通信的方式.(问题一和四)

 1.服务端编程,步骤如下

public static void main(String[] args) throws IOException {
        //1. 创建一个ServerSocket
        ServerSocket serverSocket = new ServerSocket(7777);
         //2.调用accept(),等到客户端的连接
        Socket accept = serverSocket.accept();
        System.out.println("有客户端连接");
        //3.得到客户端的Socket对象, 调用getInputStream()  getOutputStream() 得到输入输出流
        InputStream in = accept.getInputStream();//网络流
        OutputStream out = accept.getOutputStream();

        BufferedReader br = null;
        BufferedWriter bw = null;
        //4.输入流接收数据,  输出流发送数据
        //把字节流变字符流
        br = new BufferedReader(new InputStreamReader(in));
        bw = new BufferedWriter(new OutputStreamWriter(out));

        String str = br.readLine();//得到数据
        bw.write("你好");//写数据
        bw.newLine();//换行
        bw.flush();//缓冲流需要刷新

        //5.关闭流
        bw.close();
        br.close();
        serverSocket.close();
    }

2.客户端编写步骤:

public static void main(String[] args) throws IOException {
        //1.创建一个Socket, 请求服务器地址, 端口, 与服务器进行连接      //问题三
        Socket socket = new Socket("127.0.0.1",7777);        
        //2.调用getInputStream()  getOutputStream() 得到输入输出流
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();

        //3.输出流发送数据,输入流接收数据
        BufferedReader br = null;
        BufferedWriter bw = null;
        //将字节流转成字符流
        br = new BufferedReader(new InputStreamReader(in));
        bw = new BufferedWriter(new OutputStreamWriter(out));
        
        Scanner input = new Scanner(System.in);
        bw.write(input.next());//输入数据
        bw.newLine();
        bw.flush();

        br.readLine();//接收数据

        //4.关闭资源
        br.close();
        bw.close();
        socket.close();

    }

 

三、总结

1.TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送.

2.TCP是基于(面向)连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,TCP协议建立连接需要三次握手.

3.UDP是一个无连接的协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包.

4.Java为客户端提供了Socket类,为服务器端提供了ServerSocket类

5.网络编程三要素:IP地址,端口,协议

标签:java,Socket,编程,网络,TCP,bw,br,new,客户端
From: https://www.cnblogs.com/pilpill/p/16621335.html

相关文章

  • Wireshark网络分析就这么简单 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1ZCsm5DpSrEU2jVM5ZruXIg点击这里获取提取码 Wireshark可能是世界上最好的开源网络包分析器,能在多种平台上(比如Windows、L......
  • 盒子模型、 浮动布局、定位属性、 z-index、JavaScript基础语法
    今日内容概要盒子模型浮动布局定位属性z-indexJavaScript基础语法今日内容详细盒子模型所有的标签都可以看成是一个快递盒1.外边距(margin):指标签之间的距离(......
  • 双流网络two stream network学习笔记草稿(待整理)
    卷积神经网络比较擅长学习局部的特征,而非物体移动的规律先将运动信息抽取好(光流),再让CNN去学习这种(运动信息到动作分类间的)映射空间流的输入是单帧图片,而时间流的输入是一系......
  • java死锁(Java-level deadlock)
    java-leveldeadlock如下代码可以模拟java死锁。注意:当出现死锁时,应用程序是无响应的。错误信息:FoundoneJava-leveldeadlock:============================="Thread-1......
  • JavaScript知识-简介、语言规范、语言基础
    目录JavaScript简介1.ECMAScript和JavaScript的关系2.JavaScript语言3.HTML、CSS、JavaScriptJavaScript基础之语言规范1.如何使用?2.注释3.结束符JavaScript语言基础1.Java......
  • Wireshark网络分析的艺术 pdf
    高清扫描版下载链接:https://pan.baidu.com/s/1cAWKzic9t9nHu7HzFW0xnA点击这里获取提取码Wireshark是当前流行的网络包分析工具。它上手简单,无需培训就可门。很多棘手的网......
  • day25--Java集合08
    Java集合0815.HashTable15.1HashTable的基本介绍存放的元素是键值对:即K-VHashTable的键和值都不能为nullHashTable的使用方法基本上和HashMap一样HashTable是线程安......
  • java学习笔记014 枚举类
    1.比较器Comparable接口自然排序 @Override publicintcompareTo(Tt){ //自定义比较规则 //要求:this>t,返回正整数 // this==t,返回0 // this<t,返......
  • javaWeb-HTML
    HTML基础标签字体大小(<h1>---<h6>)<h1>我是h1</h1><h2>我是h1</h2><h3>我是h1</h3><h4>我是h1</h4><h5>我是h1</h5><h6>我是h1</h6>换行<hr>......
  • jpaJAVASql
    QCarInfoqCarInfo=QCarInfo.qCarInfo;BooleanExpressionexpression=qCarInfo.valid.eq(true);if(StringUtils.isNotEmpty(carListPCInput......