网络编程

java---网络编程

☆樱花仙子☆ 提交于 2020-03-04 11:13:53
// =====================UDP网络编程=================================== /**UDP * 客户端端 * 创建DatagramSocket,随机端口 * 创建DatagramPacket指定数据、长度、地址、端口 * 使用DatagramSocket发送DatagramPacket * 关闭DatagramSocket */ Scanner sc = new Scanner(System.in); DatagramSocket socket = new DatagramSocket(); while (true) { String line = sc.nextLine(); if("quit".equals(line)) { break; } DatagramPacket packet = new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666); socket.send(packet); } socket.close(); /**UDP * 服务端 * 创建DatagramSocket,随机端口 * 创建DatagramPacket指定数据、长度、地址、端口 *

JavaSE基础加强之网络编程(七)

你。 提交于 2020-03-03 16:26:08
概述 (一)网络通信概述 (二)TCP协议 (三)综合案例:文件上传 (一)网络通信概述 demo01: 软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 demo02: 网络通信协议: TCP/IP TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。 上图中,TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能。 链路层 :链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。 网络层 :网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。 运输层 :主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。 应用层

Socket网络编程学习笔记

牧云@^-^@ 提交于 2020-03-03 05:57:29
1 服务器 发送消息和接受消息的代码 namespace Socket_编程_tcp协议_服务端 { class Program { static void Main(string[] args) { //1.创建服务端socket类 Socket tcpServer = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); //2.绑定IP和端口号 192.168.155.1 IPAddress ipaddress = new IPAddress(new byte[]{192,168,155,1}); EndPoint point = new IPEndPoint(ipaddress,7788); //ipendpoint是对ip+端口号做了一次封装的类 tcpServer.Bind(point); //这是向操作系统申请一个可用的ip跟端口号 用来做通信 //3.开始监听等待客户端做连接 tcpServer.Listen(100); //参数是最大连接数 Console.WriteLine("开始监听"); Socket clientSocket = tcpServer.Accept(); //暂停当前线程,直到有一个客户端连接过来,之后进行下面的代码 /

以基于Reactor模式的高并发EchoServer为例剖析muduo库框架

£可爱£侵袭症+ 提交于 2020-03-02 17:40:49
前言 在讲解基于muduo库的高并发echo服务器之前,我们先来回顾一下我们一般编写基于Reactor模式的高并发服务器的基本流程。 muduo的EchoServer其实也是基于上述流程,只不过进行了一定程度地封装,本质上仍是Reactor模式。muduo的example中的echo服务器代码展示的是只有一个reactor的服务器,muduo其实支持one loop per thread + 线程池的模式,也即multiple reactors + 业务线程池的模式,也就是服务器同时有多个IO线程,其中Acceptor所在的IO线程成为mainReactor,其他的IO线程成为subReactor,mainReactor主要负责处理监听描述符listenfd的上的时间,也就是负责处理客户端的连接请求。而subReactor主要负责已连接描述符connfd上的事件,也就是在和客户端建立好连接之后负责处理和客户端的具体通信。mainReactor+subReactor是由多个IO线程实现的,在muduo库当中,其通过在IO线程池中设置是让其工作在单IO线程模式还是多IO线程模式。而所谓的业务线程池主要是指计算线程池,其主要负责处理具体的业务逻辑,不涉及具体的IO操作。 在认真阅读完一遍muduo库源码之后,我认为如果想基于muduo库编写一个单线程版的echo服务器

Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR

巧了我就是萌 提交于 2020-03-02 10:02:30
from http://blog.csdn.net/feiyinzilgd/article/details/5894300 Linux 网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR. SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回. SO_LINGER选项则是用来修改这种默认操作的.于SO_LINGER相关联的一个结构体如下: [cpp] view plain copy print ? #include <sys/socket.h> struct linger { int l_onoff //0=off, nonzero=on(开关) int l_linger //linger time(延迟时间) } 当调用setsockopt之后,该选项产生的影响取决于linger结构体中 l_onoff和l_linger的值: 0 = l_onoff 当l_onoff被设置为0的时候,将会关闭SO_LINGER选项,即TCP或则SCTP保持默认操作:close立即返回.l_linger值被忽略. l_lineoff值非0,0 = l

网络编程套接字

徘徊边缘 提交于 2020-03-02 04:30:37
网络字节序 内存中的多字节数据相对于内存地址有大端和小端之分, 磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分, 网络数据流同样有大端小端之分。 那么如何定义网络数据流的地址呢? 发送主机通常将发送缓冲区中的数据按内存地址从低到高的顺序发出; 接收主机把从网络上接到的字节依次保存在接收缓冲区中,也是按内存地址从低到高的顺序保存; 因此,网络数据流的地址应这样规定:先发出的数据是低地址,后发出的数据是高地址; TCP/IP协议规定:网络数据流应采用大端字节序,即低地址高字节; 不管这台主机是大端机还是小端机, 都会按照这个TCP/IP规定的网络字节序来发送/接收数据; 如果当前发送主机是小端, 就需要先将数据转成大端,否则就忽略, 直接发送即可。 概念补充: 字节序 :CPU对内存当中的数据进行存取的顺序 大端字节序 :低地址存高位 小端字节序 :低地址存低位 eg: -------------------> 主机字节序 :当前计算机的字节序,一般情况下X86_64机器都是小端机器。 如何判断当前机器是大端还是小端? #include <stdio.h> int main() { union AB { int a; char b; }c; c.a = 1; if(1 == c.b) { printf("当前计算机为小端机器!\n"); } return 0; }

网络编程之网络基础

一个人想着一个人 提交于 2020-03-01 22:42:08
计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息、共享硬件、软件、数据信息等资源。 网络编程的目的: 直接或间接地通过网络协议与其它计算机实现数据交换,进行通讯。 网络编程中有两个主要的问题: 1.如何准确地定位网络上一台或多台主机;定位主机上的特定的应用 2.找到主机后如何可靠高效地进行数据传输 IP地址: InetAddress ➢唯一的标识Internet上的计算机(通信实体) ➢本地回环地址:(hostAddress): 127.0.0.1 主机名(hostName): localhost ➢IP地址分类方式1: IPV4 和IPV6 IPV4: 4个字节组成,4个0-255。 大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽。以点分十进制表示,如192.168.0.1 IPV6: 128位 (16个字节),写成8个无符号整数,每个整数用四个十六进制位表示,数之间用冒号(: )分开,如: 3ffe:3201:1401:1280:c8ff:fe4d:db39:1984 ➢IP地址分类方式2:公网地址:(万维网使用)和私有地址(局域网使用)。192.168.开头的就是私有址址,范围即为192.168.0.0–192. 168.255.255,专门为组织机构内部使用 ➢特点

Python----网络编程----UDP

a 夏天 提交于 2020-02-28 23:48:52
Python学习之路,点击有全套Python笔记 1、什么是socket socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于Socket 来完成通信的 例如我们每天浏览网页、QQ 聊天、收发 email 等等 它是全双工 2、什么是UDP 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。 创建模板: import socket socket . socket ( AddressFamily , Type ) Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议) 发送示例 import socket def main ( ) : # 创建tcp的套接字 udp_socket = socket . socket (

socket网络编程实现并发服务器——IO多路复用

你。 提交于 2020-02-28 22:44:27
一 五种网络I/O模型 在Linux下进行网络编程时,服务器端编程经常需要构造高性能的IO模型,常见的IO模型有五种: (1)同步阻塞IO (2)同步非阻塞IO(Non-blocking IO) (3)IO多路复用(IO Multiplexing) :IO多路复用模型是建立在内核提供的多路分离函数select基础之上的,使用select函数 可以避免同步非阻塞IO模型中轮询等待的问题,此外poll、epoll都是这种模型。 (4) 信号驱动IO(signal driven IO) (5)异步IO(Asynchronous IO) 各服务器源代码:https://gitee.com/constructorvirgil/lingyun_apue/tree/master/yangjianing 二 多路复用–select select()函数允许进程指示内核等待多个事件(文件描述符)中的任何一个发生,并只在有一个或多个事件发生或经历一段指定时 间后才唤醒它,然后接下来判断究竟是哪个文件描述符发生了事件并进行相应的处理。 # include <sys/select.h> # include <sys/time.h> struct timeval { long tv_sec ; //seconds long tv_usec ; //microseconds } ; FD_ZERO ( fd