网络编程

day11【网络编程】

天涯浪子 提交于 2019-12-28 05:26:07
day11【网络编程】 主要内容 软件架构CS/BS 网络通信三要素 TCP通信 Socket套接字 ServerSocket 教学目标 能够辨别UDP和TCP协议特点 能够说出TCP协议下两个常用类名称 能够编写TCP协议下字符串数据传输程序 能够理解TCP协议下文件上传案例 能够理解TCP协议下案例2 第一章 网络编程入门 1.1软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 两种架构各有优势,但是无论哪种架构,都离不开网络的支持。 网络编程 ,就是在一定的协议下,实现两台计算机的通信的程序。 1.2 网络通信协议 **网络通信协议:**通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。 TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本

Android网络编程(十二) 之 Retrofit2原理分析

大兔子大兔子 提交于 2019-12-27 13:37:30
1 使用回顾 我们在前面博文 《Android网络编程(十一) 之 Retrofit2框架的使用》 中已经对Retrofit的使用进行过介绍。今天我们接着往下来阅读Retrofit的关键源码从而它进行更加深入的理解。开始前,先来回顾一下简单的使用,通过使用步骤来深入分析每行代码背后的原理,代码如: // 0 创建一个网络请求的接口 public interface AppInfoService { @GET("url.json") Call<List<AppInfo>> getAppInfoList(@Query("id") int id); } private void getRequest() { // 1 创建 Retrofit 对象,输入请求URL、转换器等 Retrofit retorfit = new Retrofit.Builder() .baseUrl("https://api.xx.com/ ") .addConverterFactory(GsonConverterFactory.create()) .build(); // 2 通过Retrofit的create创建自定义的请求接口对象 AppInfoService appInfoService = retorfit.create(AppInfoService.class); // 3

Linux网络编程:UDP Socket编程范例

為{幸葍}努か 提交于 2019-12-27 09:14:14
TCP协议提供的是一种可靠的,复杂的,面向连接的 数据流(SOCK_STREAM)传输服务,它通过三段式握手过程建立连接。TCP有一种“重传确认”机制,即接收端收到数据后要发出一个肯定确认的信号,发送端如果收到接收端肯定确认的信号,就会继续发送其他的数据,如果没有,它就会重新发送。 而UDP协议是一种无连接的,不可靠的数据报(SOCK_DGRAM)传输服务。使用UDP套接口不用建立连接,服务端在调用socket()生成一个套接字并调用bind()绑定端口后就可以进行通信(recvfrom函数和sendto函数)了;客户端在用socket()生成一个套接字后就可以向服务端地址发送和接收数据了。 注意:TCP使用的是流套接字( SOCK_STREAM ),UDP使用的是数据报套接字( SOCK_DGRAM ) UDP套接字编程范例: /************************************************************************* > File Name: server.c > Author: SongLee > E-mail: lisong.shine@qq.com > Created Time: 2014年05月11日 星期日 19时55分49秒 > Personal Blog: http://songlee24.github.io

五十五 网络编程 UDP编程

安稳与你 提交于 2019-12-27 09:13:55
TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。 虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。 我们来看看如何通过UDP协议传输数据。和TCP类似,使用UDP的通信双方也分为客户端和服务器。服务器首先需要绑定端口: s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定端口: s.bind(('127.0.0.1', 9999)) 创建Socket时, SOCK_DGRAM 指定了这个Socket的类型是UDP。绑定端口和TCP一样,但是不需要调用 listen() 方法,而是直接接收来自任何客户端的数据: print('Bind UDP on 9999...') while True: # 接收数据: data, addr = s.recvfrom(1024) print('Received from %s:%s.' % addr) s.sendto(b'Hello, %s!' % data, addr) recvfrom() 方法返回数据和客户端的地址与端口,这样,服务器收到数据后

37 - 网络编程-UDP编程

别说谁变了你拦得住时间么 提交于 2019-12-27 09:13:46
目录 1 UDP协议 2 UDP通信流程 3 UDP编程 3.1 构建服务端 3.3 常用方法 4 聊天室 5 UDP协议应用 1 UDP协议 UDP是面向无连接的协议, 使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包 。但是,能不能到达就不知道了。虽然用UDP传输数据不可靠,但它的优点是和TCP比,速度快,对于不要求可靠到达的数据,就可以使用UDP协议。 2 UDP通信流程 我们先来了解一下,python的socket的通讯流程: 服务端: 创建Socket对象 绑定IP地址Address和端口Port,使用bind方法,IPv4地址为一个二元组('IP',Port), 一个UDP端口只能被绑定一次 接受数据,recvfrom方法,使用缓冲区接受数据 发送数据,sendto方法,类型为bytes 关闭连接 客户端: 创建Socket对象 连接服务端。connect方法(可选) 发送数据,sendto/send方法,类型为bytes 接受数据,recvfrom/recv方法,使用缓冲区接受数据 关闭连接 我们可以看到UDP不需要维护一个连接,所以比较简单 3 UDP编程 使用udp编程和使用tcp编程用于相似的步骤,而因为udp的特性,它的服务端不需要监听端口,并且客户端也不需要事先连接服务端。根据上图,以及建立服务端的流程

Java网络编程

喜你入骨 提交于 2019-12-27 07:22:59
简单的B/S程序: 服务端程序: package com.wx.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class TcpServer extends Thread{ //定义服务器接口Server Socket ServerSocket serverSocket = null; //定义一个服务器,定义端口 public TcpServer(int port){ try { serverSocket = new ServerSocket(port); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { super.run(); System.out.println("服务器再启动中。。。等待用户的连接"); while(true){ //建立socket接口,accept方法是一个阻塞进程,等待有用户连接才往下走 try { Socket socket = serverSocket.accept(); /

IO:BIO NIO AIO网络编程模型

痴心易碎 提交于 2019-12-26 16:41:52
参考视频: https://www.bilibili.com/video/av76223318?p=5 I/O模型简单的解释:用什么样的通道进行数据的发送和接收,很大程度上决定了程序通讯的性能 Java共支持三种网络编程模型: BIO,NIO,AIO BIO:Blocking IO 同步并阻塞(传统阻塞型) ,服务器实现模式为一个连接一个线程,即客户端有连接请求时,服务器端就需要启动一个线程进行处理,如果这个连续不做任何事情会造成不必要的线程开销。可以通过线程池机制改善(实现多个客户连接服务器)。 放在java.io包下 适用场景: 连接数目小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中。jdk1.4之前的唯一选择,但程序简单易理解 BIO简单流程: 1 服务器端启动一个ServerSockert 2 客户端启动Socket对服务器进行通讯,默认情况下服务器端需要对每个客户建立一个线程与之通讯 3 客户端发送请求后,先咨询服务器是否有线程响应 3.1 如果没有响应,则会等待,或者被拒绝 3.2 如果有响应,客户端线程会等待请求结束后,再继续执行 public class BioServerSocket { public static void main(String[] args) throws Exception{ //创建ServerSocket

网络编程-upd\\Socket接收发送

那年仲夏 提交于 2019-12-25 11:43:02
import java.io.*; import java.net.*; public class first { public static void main(String[] args) { // TODO Auto-generated method stub MySend ms = new MySend(); MyRece mr = new MyRece(); Thread th1 = new Thread(ms); Thread th2 = new Thread(mr); th1.start(); th2.start(); } } class MySend implements Runnable { public void run() { DatagramSocket ds = null; try { ds = new DatagramSocket(8888); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 2 确定数据 、 封装成数据包 byte[] data = "udp ge men lai le ".getBytes(); DatagramPacket dp = null; try { dp = new

Java网络编程总结

一世执手 提交于 2019-12-25 03:12:52
网络编程: 端口: 物理端口: 逻辑端口:用于标识进程的逻辑地址,不同进程的标识;有效端口:0~65535,其中0~1024系统使用或保留端口。 java 中ip对象: InetAddress. import java.net.*; class IPDemo{ public static void main(String[] args) throws UnknownHostException{ //通过名称(ip字符串or主机名)来获取一个ip对象。 InetAddress ip = InetAddress.getByName("www.baidu.com");//java.net.UnknownHostException System.out.println("addr:"+ip.getHostAddress()); System.out.println("name:"+ip.getHostName()); } } Socket :★★★★, 套接字,通信的端点 。 就是为网络服务提供的一种机制,通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。 UDP 传输: 1,只要是网络传输,必须有socket 。 2,数据一定要封装到数据包中,数据包中包括目的地址、端口、数据等信息。 直接操作udp不可能

(十)Linux 网络编程之ioctl函数

旧街凉风 提交于 2019-12-25 03:12:26
1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的信息,所以,我们有必要了解一下ioctl函数的具体实现. 2.相关结构体与相关函数 #include int ioctl(int d,int request,....); 参数: d-文件描述符,这里是对网络套接字操作,显然是套接字描述符 request-请求码 省略的部分对应不同的内存缓冲区,而具体的内存缓冲区是由请求码request来决定的,下面看一下具体都有哪些相关缓冲区。 (1)网络接口请求结构ifreq struct ifreq{ #define IFHWADDRLEN 6 //6个字节的硬件地址,即MAC union{ char ifrn_name[IFNAMESIZ];//网络接口名称 }ifr_ifrn; union{ struct sockaddr ifru_addr;//本地IP地址 struct sockaddr ifru_dstaddr;//目标IP地址 struct sockaddr ifru_broadaddr;//广播IP地址 struct sockaddr ifru_netmask;//本地子网掩码地址 struct sockaddr ifru