网络编程

1TCP协议:类似已婚家庭可靠性高需要三次握手需要对方反馈是否收到若其中一端关闭服务端也会跟着关闭TCP比较专一(启动时要先开启服务端在开启客户端)

需要2端服务端(Server)

```javascript

package org.example;

import java.io.DataInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

public static void main(String[]args)throws Exception {

System.out.println("----服务端启动成功-------" );

//创建Server对象,同时为服务端注册端口

        ServerSocket serverSocket=new ServerSocket(8888);

//        需要使用Server对象,使用一个accept方法,等待客户端的连接请求

        Socket socket=serverSocket.accept();

//        从socket通信管道中得到一个字节输入流

        InputStream is=socket.getInputStream();

//        把原始的字节输入流包装成数据输入流

        DataInputStream dis=new DataInputStream(is);

while (true) {

//        使用数据输入流读取客户端发送过来的消息

            try {

String rs=dis.readUTF();

System.out.println(rs);

//        获取客户端的IP地址

                System.out.println(socket.getRemoteSocketAddress());

}catch (IOException e) {

System.out.println(socket.getRemoteSocketAddress()+"离线了:");

dis.close();

socket.close();

break;

}

//            dis.close();

//            socket.close();

        }

}

}

```

客户端(Client)

```javascript

import java.io.IOException;a

import java.io.OutputStream;

import java.net.Socket;

import java.util.Scanner;

public class Client {

public static void main(String[]args)throws Exception {

//        创建socket对象

        Socket socket=new  Socket("127.0.0.1",8888);

//        从socket通信管道中得到一个字节输出流,用来 发数据给服务程序.

        OutputStream os =socket.getOutputStream();

//把低级的字节输出流包装成数据输出流

        DataOutputStream dos =new DataOutputStream(os);

Scanner sc=new Scanner(System.in);

while (true) {

System.out.println("请输入");

String msg=sc.nextLine();

if ("exit".equals(msg)){

System.out.println("欢迎您下次光临,突出成功!");

break;

}

dos.writeUTF(msg);

dos.flush();

//        开始写数据出去了

//            dos.writeUTF("在一起,好吗?");

        }

//        dos.close();

//

//

//        socket.close();

    }

}

```

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层协议。它是互联网协议套件中的一部分,用于在网络上可靠地传输数据。

以下是 TCP 协议的一些关键特点:

面向连接:在通信之前,客户端和服务器之间建立一个连接。连接的建立包括三次握手过程,确保双方都准备好发送和接收数据。

可靠性:TCP 提供了可靠的数据传输。它通过序列号、确认应答和重传机制来确保数据的可靠性。如果发送方发送的数据包丢失或损坏,接收方会请求重传,直到数据正确接收为止。

流量控制:TCP 使用滑动窗口机制来进行流量控制。接收方可以通知发送方其可接收的数据量,以避免发送过多数据导致网络拥塞或接收方缓冲区溢出。

拥塞控制:TCP 通过拥塞窗口和拥塞避免算法来处理网络拥塞。当网络出现拥塞时,TCP 会降低发送速率以减轻网络负载,并且在逐渐增加发送速率时监测网络的拥塞情况。

面向字节流:TCP 是一种面向字节流的协议,它将数据视为连续的字节流,而不是分割成消息或数据包。因此,应用层协议需要定义消息的边界。

全双工通信:TCP 连接是全双工的,意味着客户端和服务器可以同时发送和接收数据,实现双向通信。

TCP 协议在许多网络应用中广泛使用,包括网页浏览、电子邮件、文件传输等。它提供了可靠的数据传输和连接管理,适用于需要确保数据完整性和可靠性的场景。

2UDP协议:类似舔狗 单相思 不惧可靠性只管发出不管对方是否接收  (启动时要先开启服务端在开启客户端)


服务端(Server)

```javascript

package org.example;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;

public class Server {

public static void main(String[]args) {

try {

ServerSocket serverSocket =new ServerSocket(8888);

System.out.println("服务端已启动,等待客户端连接...");

Socket socket =serverSocket.accept();

System.out.println("客户端已连接");

BufferedReader br =new BufferedReader(new InputStreamReader(socket.getInputStream()));

BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

BufferedReader consoleReader =new BufferedReader(new InputStreamReader(System.in));

new Thread(() -> {

String input;

try {

while ((input =br.readLine()) !=null) {

System.out.println("客户端:" +input);

}

}catch (Exception e) {

e.printStackTrace();

}

}).start();

String output;

while (true) {

System.out.print("服务端:");

output =consoleReader.readLine();

bw.write(output);

bw.newLine();

bw.flush();

}

}catch (Exception e) {

e.printStackTrace();

}

}

}

```

客户端(Client)

```javascript

package org.example;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

public class Client {

public static void main(String[]args) {

try {

Socket socket =new Socket("localhost",8888);

BufferedReader br =new BufferedReader(new InputStreamReader(socket.getInputStream()));

BufferedWriter bw =new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

BufferedReader consoleReader =new BufferedReader(new InputStreamReader(System.in));

new Thread(() -> {

String input;

try {

while ((input =br.readLine()) !=null) {

System.out.println("服务端:" +input);

}

}catch (Exception e) {

e.printStackTrace();

}

}).start();

String output;

while (true) {

System.out.print("客户端:");

output =consoleReader.readLine();

bw.write(output);

bw.newLine();

bw.flush();

}

}catch (Exception e) {

e.printStackTrace();

}

}

}

```

UDP(用户数据报协议)是一种无连接的、不可靠的、面向数据报的传输层协议。与TCP相比,UDP更加简单,因为它不提供连接状态跟踪、流量控制和拥塞控制等功能。UDP协议的特点包括:

无连接性:UDP是一种无连接的协议,也就是说在数据传输前不需要建立连接。每个数据包都是独立的,相互之间没有关联。

不可靠性:UDP不保证数据传输的可靠性。它不提供重传机制,如果数据包在传输过程中丢失、损坏或顺序错乱,UDP不会自动进行重传或纠正错误。

面向数据报:UDP是一种面向数据报的协议,意味着数据以数据包的形式进行传输。每个数据包都有固定的大小限制,超出限制的数据将被分割或丢弃。

低延迟:由于UDP不需要建立连接和维护连接状态,因此具有较低的延迟。这使得UDP适用于实时应用,如音频和视频流传输。

适用于广播和多播:UDP支持广播和多播传输,可以将数据包同时发送给多个接收方。

简单轻量:UDP的实现相对简单,开销较小。它不像TCP那样复杂,不需要维护连接状态和缓冲区,因此在某些情况下更适合要求轻量级通信的应用。

UDP常用于不需要可靠性保证的应用,如DNS查询、NTP时间同步、实时音视频传输等。在这些应用中,传输速度和实时性更为重要,而数据的丢失或错误可以通过应用层协议来处理

3HTTP协议:

HTTP(超文本传输协议)是一种用于传输超文本(如HTML)数据的应用层协议。它是互联网上应用最广泛的协议之一,用于在客户端和服务器之间传输和交换数据。以下是HTTP协议的一些关键特点:

无连接:HTTP是一种无连接的协议,每个请求-响应交换都是独立的,服务器不会保存客户端的连接状态。这意味着每个请求都是一个独立的事务,服务器处理完请求后即断开连接。

无状态:HTTP是一种无状态的协议,即服务器不会保存客户端的状态信息。每个请求都是相互独立的,服务器不会记住之前的请求或会话状态。为了维护状态,通常需要使用会话机制,如cookie或session。

基于请求-响应模型:HTTP通信采用请求-响应模型。客户端发送HTTP请求到服务器,服务器处理请求并返回HTTP响应给客户端。请求和响应包含了一些元数据(如头部信息)和可选的数据主体。

支持多种请求方法:HTTP定义了多种请求方法,包括GET、POST、PUT、DELETE等。每种方法有不同的语义,用于执行不同的操作,如获取资源、提交数据、更新资源等。

基于文本协议:HTTP使用文本格式进行通信,请求和响应都是由ASCII文本组成的。这使得HTTP消息易于阅读、调试和理解,但也增加了通信的开销。

无加密:HTTP本身不提供数据加密功能,传输的数据是明文的。为了安全传输敏感信息,可以使用HTTPS(HTTP Secure),它在HTTP上加入了SSL/TLS加密层。

HTTP被广泛用于Web浏览器和Web服务器之间的通信,用于获取网页、图像、视频等资源。除了Web浏览器,许多其他应用程序和服务也使用HTTP进行通信,如API接口、移动应用程序、IoT设备等。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容