首页 > 编程语言 >什么是网络编程(一)

什么是网络编程(一)

时间:2022-11-19 18:13:13浏览次数:29  
标签:Socket 什么 编程 网络 System println new out socket

1.什么是网络、计算机网络的构成是什么?

在计算领域中,网络是传输信息、接受、共享的虚拟的平台。

通过它可以把各个点、面、体的信息联系到一起,从而实现这些资源的共享。

网络是人类发展史上最重要的发明,提高了人类和科技的一个发展。

 

 

 

 

2.什么是网络编程?

网络编程从大的方面就是说对信息的发送接收。

通过操作相应API调度计算机资源硬件,并且利用管道(网线)进行数据交互的过程。

更为具体的涉及:网络模型、套接字、数据包

3. 7层网络模型--OSI

 

 

 

基础层:物理层(physical)、数据链路层(Datalink)、网络层(network).。

传输层(Transport):TCP-UDP协议层、Socket。

高级层::会话层(Session)、表示层(Presentation)、应用层(Application)

4. 网络模型---对应关系

 5.Socket与TCP、UDP

Socket: 简单来说是ip地址与端口的结合协议(RFC 793).

一种地址与端口的结合描述协议。

TCP/IP协议的相关API的总称;是网络API的集合实现.

涵盖了Stream socket /Datagram Socket

socket 的组成与作用:

在网络传输中用于唯一标识两个端点的链接。

端点:包括(ip+port)

4个要素:客户端的地址、客户端的端口、服务器的地址、服务器端口。

6. Socket的传输原理

Socket之TCP:

tcp是面向连接的通讯协议。

通过三次握手建立连接,通讯完成时要拆除连接。

由于TCP是面向连接的,所以只能用于端到端的通信。

Socket之UDP:

UDP是面向无连接进行通讯的。

UDP数据包括目的端口号和源端口号信息。

由于通讯时是不需要连接,所以可以是实现广播发送,并不局限于端到端。

TCP传输图解:

 

 

 

 

UDP传输图解:

 

 

 

 

7.Client-Server Application

TCP/IP协议中,两个进程间通信的主要模式为CS模型

主要的目的:协调网络中计算机资源、服务模式、进程间数据共享

常见的FTP、SMTP、HTTP

8.报文段

报文段是指TCP/IP协议网络传输过程中,起着路由导航作用。

可以查询各个网络路由网段、IP地址、交换协议等ip数据包。

报文段充当整个TCP/IP协议数据包的导航路由功能。

报文在传输过程中会不断的封装成分组、包、帧来传输。

封装的方式就是添加一些控制信息组成的首部,即报文头。

9.传输协议

一种约定,约束

约定大于配置,在网络传输中依然食用;网络的传输是健壮的稳定的,得益于基础的协议构成。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
* @Author: itwang @Description: @Date: Created in 22:40 2018/12/29 @Package: PACKAGE_NAME @Modified
* By:
*/
public class Server {

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

ServerSocket serverSocket = new ServerSocket(2000);
System.out.println("服务器准备就绪----");
System.out.println(
"服务器信息:" + serverSocket.getInetAddress() + "p:" + serverSocket.getLocalPort());
for (; ; ) {
// 等待客户端连接
Socket client = serverSocket.accept();
// 客户端构建异步线程
ClientHandler clientHandler = new ClientHandler(client);
// 启动线程
clientHandler.start();
}

// todo(client);
}

/** 客户端消息处理 */
private static class ClientHandler extends Thread {

private Socket socket;
private boolean flag = true;

ClientHandler(Socket socket) {

this.socket = socket;
}

/**
* If this thread was constructed using a separate <code>Runnable</code> run object, then that
* <code>Runnable</code> object's <code>run</code> method is called; otherwise, this method does
* nothing and returns.
*
* <p>Subclasses of <code>Thread</code> should override this method.
*
* @see #start()
* @see #stop()
* @see #(ThreadGroup, Runnable, String)
*/
@Override
public void run() {
super.run();
System.out.println("客户端连接:" + socket.getInetAddress() + "p:" + socket.getPort());

try {
// 得到打印流,用于服务器输出;服务端回送数据
PrintStream socketOutPut = new PrintStream(socket.getOutputStream());

// 得到输入流
BufferedReader socketInput =
new BufferedReader(new InputStreamReader(socket.getInputStream()));

do {
// 从客户端拿到一条数据
String str = socketInput.readLine();
if ("bye".equalsIgnoreCase(str)) {
flag = false;
// 回送
socketOutPut.println("bye");

} else {
// 打印到屏幕并回送数据长度
System.out.println(str);
socketOutPut.println("回送:" + str.length());
}

} while (flag);

socketInput.close();
socketOutPut.close();
} catch (Exception e) {
System.out.println("连接异常断开");
} finally {
// 连接关闭
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
    }
  }
System.out.println("客户端关闭" + socket.getInetAddress() + "p" + socket.getPort());
    }
  }
}

 

import java.io.*;
import java.net.Inet4Address;
import java.net.InetSocketAddress;
import java.net.Socket;

/**
* @author : itwang
* @description:
* @date: Created in 22:40 2018/12/29
* @package: PACKAGE_NAME
* @modified By:
*/
public class Client {

public static void main(String[] args) throws IOException {
// 创建socket
Socket socket = new Socket();
// 设置超时时间
socket.setSoTimeout(3000);

socket.connect(new InetSocketAddress(Inet4Address.getLocalHost(), 2000));

System.out.println("已经发起服务器连接,并进入后续流程");
System.out.println("客户端信息:" + socket.getLocalAddress() + "p:" + socket.getLocalPort());
System.out.println("服务端信息:" + socket.getInetAddress() + "P" + socket.getPort());

try {
todo(socket);
} catch (Exception e) {
System.out.println("异常关闭");
}
// 释放资源
socket.close();
System.out.println("客户端退出");
}

private static void todo(Socket client) throws IOException {
// 构建键盘输入流
InputStream in = System.in;
BufferedReader input = new BufferedReader(new InputStreamReader(in));
// 得到socket输出流,并且转化为打印流
OutputStream outputStream = client.getOutputStream();
PrintStream socketPrintStream = new PrintStream(outputStream);
// 得到socket输入流,并转化为bufferedReader
InputStream inputStream = client.getInputStream();
BufferedReader socketBufferedReader = new BufferedReader(new InputStreamReader(inputStream));

boolean flag = true;

do {
// 键盘读取一行
String str = input.readLine();
// 发送到服务器
socketPrintStream.println(str);

// 从服务器读取一行
String echo = socketBufferedReader.readLine();
if ("bye".equalsIgnoreCase(echo)) {
flag = false;
} else {
System.out.println(echo);
}
} while (flag);
// 资源释放
socketPrintStream.close();
socketBufferedReader.close();
     }
  }

标签:Socket,什么,编程,网络,System,println,new,out,socket
From: https://www.cnblogs.com/hangqqw/p/16906644.html

相关文章

  • 计算机网络学习
    目录1.计算机网络概述1.1计算机网络基本概念1.1.1什么是计算机网络?1.1.1.1计算机网络=通信技术+计算机技术1.1.1.2计算机网络的定义1.1.1.3交换机1.1.1.4网络Inter......
  • 卷积神经网络
    title:卷积神经网络date:2022-06-1920:46:59tags:-cvcategories:-note-DeepLearning目录:什么是卷积?reference什么是卷积?举个例子:图1:为一个人进食的......
  • freeRTOS中消息邮箱是什么?要怎么使用呢?
    1、freeRTOS中的消息邮箱前面已经分享了freeRTOS中的信号量的使用方式,信号量是系统中的一种任务的通知方式,如果有不明白的,可以参看 freeRTOS使用:信号量介绍和使用方法本文......
  • 《Unix/Linux系统编程》第十四章学习笔记 20201209戴骏
    MySQL数据库系统知识点总结一、MySQLMySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle旗下产品。MySQL是最流行的关系型数据库管理系统之一,......
  • 硬路由刷OpenWrt的网络拓扑
    硬路由看似有很多网口,但其实只有一张网卡(一个网口),所有的网口都是通过划分VLAN来实现不同的功能。如下图:硬路由有5个网口。其中Port0属于VLAN1,作为WAN口。Port1~Port4属......
  • PGL图学习之图神经网络GraphSAGE、GIN图采样算法[系列七]
    0.PGL图学习之图神经网络GraphSAGE、GIN图采样算法[系列七]本项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5061984?contributionType=1相关项目参考:更......
  • 安卓系统中如何使用网络请求库
    目录在清单文件中,赋予app网络权限在module的gradle文件添加依赖在清单文件中,赋予app网络权限在包名下面加上这段内容<uses-permissionandroid:name="android.permissio......
  • NTP网络授时服务器(NTP服务器)助力智慧城市网络系统
    NTP网络授时服务器(NTP服务器)助力智慧城市网络系统京准电子科技官微——ahjzsz智慧城市建设行动框架为:一个“城市大脑”、一个数据资源中心、一套智能基础设施、五大智能......
  • 实验四:神经网络算法实验
    【实验目的】理解神经网络原理,掌握神经网络前向推理和后向传播方法;掌握神经网络模型的编程实现方法。【实验内容】1.1981年生物学家格若根(W.Grogan)和维什(W.Wirth)发现......
  • (9数据处理)编程输入整数m、n,创建一个m行n列的随机数组并显示
    样例输入23样例输出[[0.543404940.278369390.42451759][0.844776130.004718860.12156912]] 说明运行结果中随机数数值不考虑,只需保证生成随机数的个数......