网络编程

Java网络编程之tcp的socket通信

孤人 提交于 2020-02-28 14:13:19
1、客户端MyClient.java 1 import java.io.*; 2 import java.net.*; 3 4 public class MyClient 5 { 6 public static void main(String[] args)throws Exception 7 { 8 Socket s = new Socket("192.168.1.1" , 30000); 9 // 客户端启动ClientThread线程不断读取来自服务器的数据 10 new Thread(new ClientThread(s)).start();11 // 获取该Socket对应的输出流 12 PrintStream ps = new PrintStream(s.getOutputStream()); 13 String line = null; 14 // 不断读取键盘输入 15 BufferedReader br = new BufferedReader( 16 new InputStreamReader(System.in)); 17 while ((line = br.readLine()) != null) 18 { 19 // 将用户的键盘输入内容写入Socket对应的输出流 20 ps.println(line); 21 } 22 } 23 } 2、加入多线程

Java学习:网络编程

笑着哭i 提交于 2020-02-28 14:00:26
网络编程 1.1 网络编程基础知识 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。 两类传输协议:tcp和udp TCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。 UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。  

Java网络编程之UDP程序设计

空扰寡人 提交于 2020-02-28 13:58:02
1.UDP简介 使用UDP发送消息,对方不一定收到,因为所有的信息使用数据报的形式发送出去,这就要求客户端要始终等待接收服务器发送过来的信息,在Java中使用DatagramSocket类和DatagramPacket类完成UDP程序的开发。 2.程序实现 使用DatagramPacket类包装一条要发送的信息,之后使用DatagramSocket类用于完成信息的发送操作。DatagramPacket类的常用方法: 类型 方法 描述 构造 DatagramPacke t(byte[] buf, int length) 构造 DatagramPacket ,用来接收长度为 length 的数据包。 构造 DatagramPacket (byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 byte[] getData () 返回数据缓冲区。 int getLength () 返回将要发送或接收到的数据的长度。 DatagramSocket类常用方法: 类型 方法 描述 构造 DatagramSocket (int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。 void send (DatagramPacket p)

Android网络编程要学的东西与Http协议学习

Deadly 提交于 2020-02-28 12:30:12
本节引言: 本节开始我们来学习Android网络编程相关的一些东西:Android端网络编程是要干嘛?http协议的学习,使用自带扣脚Json解析类解析Json,XML解析常用的几种方式,HttpUrlConnection和 HttpClient的使用,文件的上传,下载,WebService的使用,WebView,Socket通信的使用等! 1.Android与互联网交互的三种方式 2.初始Http协议 实际开发中我们和服务端打交道一般用得都是基于Http协议的通信,所以学好Http协议是非常重要的,当然我们不用过于考虑一些细节的东西,有个大体的了解即可!都是一些概念性的东西! (1)什么是Http协议 答:hypertext transfer protocol(超文本传输协议),TCP/IP协议的一个应用层协议,由于定义WEB浏览器和WEB服务器之间交换数据的过程,客户端连上web服务器后,若想获取web服务器中的某个web资源,需准守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。 (2)Http 1.0 与 Http 1.1的区别 答:1.0协议,客户端与web服务器建立连接后,只获得一个web资源。而1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源! (3)Http协议的底层工作流程: 答:我们先要知道两个名词: SYN

Linux 网络编程API(一):基础

旧街凉风 提交于 2020-02-28 09:55:40
Linux网络API主要分为三大类: socket地址API socket基础API 网络信息API socket地址API 大端字节序指一个整数的高位字节存储在内存的低地址处,低位字节存储在内存的高地址处, 反之小端字节序指整数的高位字节存储在内存的高地址处,而低位字节则存储在内存的低地址处 PC大多采用小端字节序,而网络字节序为大端字节序,解决方法为:发送端要把发送的数据转化成大端字节序数据后发送,而接收端知道对方传送过来的数据是大端字节序,再将其转化为小端字节序使用 Linux提供了以下四种API来进行主机字节序和网络字节序的转换 # include <netinet/in.h> unsigned long int htonl ( unsigned long int hostlong ) ; unsigned short int htons ( unsigned short int hostshort ) ; unsigned long int ntohl ( unsigned long int netlong ) ; unsigned short int ntohs ( unsigned long int netshort ) ; htonl 表示“host to network long”,即将长整型主机字节序转化为网络字节序,反之亦然 长整型通常用来转换IP地址

java网络编程基础BIO,NIO学习

大憨熊 提交于 2020-02-27 04:55:00
网络各个层的数据包格式 即一帧就是以上的,如果 数据太大,那么就分成多个 帧 进行发送 java.io 输入与输出: 用法可以这样记 : 读进去(input), 写出来(output) 数据源 到 应用 就是 输入流, 应用到 数据源就是 对应 输出流 字节流即处理字节,也就是 1 byte = 8 bit 字符流高于 字节流 ,虽然操作数据最基本是字节的,但是 字符流这里并不是一个字节一个字节 去读写的,而是一个字符一个字符去读写的。 字符对应Java就是 char (Character) , 1 char 需要 2 byte 去存储 以上是基本的,下面是衍生的复制类,属于包装类: InputStreamReader 即可将字节转换为字符的作用 OutputStreamReader 将字符转为字节 作用 字节流 以下是包装类 DataInputStream 与DataOutputStream 即可以将字节 转换为对应的 基本类型比如 int ,long Socket socket 也是一种数据源。 socket 可以类比为相似现实的 插座, 插上之后就有电流,电流就是IO流 在Unix 系统中 一切皆是文件,因此 socket 也是文件 同步/异步/阻塞/非阻塞 同步或者异步 是 对通信机制上面来说的。即 被调用方的处理结果的形式来说的。 即 被调用方 直接返回结果,就是同步。

网络编程中几个常见的易错概念

佐手、 提交于 2020-02-27 03:43:24
并行和并发 并发(一个人同时做多件事):指的是在一个时间段内,有几个程序在CPU上运行,但是任意时刻只有一个程序在CPU上运行,这种情景叫并发。(泡茶:洗杯子、放茶叶、烧水) 并行(多个人同时做多件事):指的是任意时刻有多个程序同时运行在多个CPU上,所以最大并行数跟CPU的核心数相同。 同步和异步 (关心被调用方的行为:老板是否在通信中回复结果) 同步和异步关注的是消息通信机制 同步是指代码在调用IO操作时,必须等待IO操作完成才返回的调用方式。 异步是指代码在调用IO操作时不必等待IO操作完成就返回的一种调用方式。 eg:给书店打电话问老板有没有软件测试这本书 老板说:“你先别挂电话,我先去找找。”一会儿,老板找到了,和你说有。这种情景叫同步。 老板说:“你先挂了,等我找一找。” 这种情景叫异步。 异步如何得到结果? 一种是回调,一种是轮询 如果老板找到之后主动打电话给你,这种情况叫回调。 老板不给你回电话,你给老板隔5分钟打一次电话,这种情况叫轮询。 阻塞和非阻塞 (关心程序在等待调用结果时的状态,也就是调用方的状态,个人) 阻塞是指调用方当前的线程被挂起 非阻塞是指调用方线程不会被挂起,而是立即返回做其他事情 eg:在等待老板的结果的过程中,如果你在傻傻等,就是阻塞;如果你在等待的过程中去做其他事情了,比如刷刷微博啥的,就是非阻塞。 阻塞与非阻塞与同步异步没关系 总结:

浅谈Java网络编程——非阻塞I/O

柔情痞子 提交于 2020-02-26 11:46:46
文件描述符(descriptors) Unix中I/O的基本组成元素是字节序列。大多数程序应用于字节流或I/O流。 进程通过描述符引用I/O流,也被称作文件描述符。管道、文件、POSIX IPC's(消息队列,信号量,共享内存),事件队列等都是通过文件描述符引用I/O流。 创建和释放描述符 描述符创建: 通过系统命令调用(open,pipe,socket等)创建; 继承自父进程。 描述符释放: 进程退出 系统调用 close 标记为 close on exec 的描述符在 exec 后释放 Close-on-exec 当进程 forks 时,所有描述符都会复制到子进程中。如果任意描述符被标记为 close on exec ,那么当子进程 execs 之前,父进程 forks 之后,这些描述符将关闭并且在子进程中不再可用。 使用描述符通过 read 、 write 命令调用的数据转换 File Entry 每个描述符都指向内核中的File entry的数据结构。file entry为每个描述符维度了一个file offset。系统调用命令 open 创建file entry. Fork/Dup and File Entries 由 fork 创建的描述符被父子进程共享,在file entry中引用同一个 offset 。 dup/dup2 的系统调用与此类似。 #include

Android--网络编程(第一行代码)

北战南征 提交于 2020-02-26 02:48:47
一、使用Http协议访问网络 工作原理:客户端向服务器发出一条HTTP请求,服务器收到请求之后会返回一些数据给客户端,然后客户端再对这些数据进行解析和处理。 1、HttpURLConnection 一般来说会先开一个子线程,将这个线程单独包装成一个方法。(主线程即UI线程不进行任何耗时操作,否则会导致程序无法响应,故开启子线程进行耗时操作即网络响应) 实例化一个URL对象,封装一个想要访问的资源,用URL的openConnect------ion()方法得到一个HttpURLConnection对象。 接着调用HttpURLConnection对象的setRequestMethod(String)方法设置HTTP请求所使用的方法。(常用的方法有"GET"和"POST"。前者表示希望从服务器那里获取数据,而POST则表示希望从服务器那里获取数据。)接下来就可一进行一些自由的定制了,比如设置连接超时,读取超时的毫秒数,(当到了设置的时间还没有反应就是超时)以及服务器希望得到的一些消息头等。HttpURLConnection#setConnection(int),和HttpURLConnection#setReadTimeout(int)。然后就可以用HttpURLCoonnection#getInputStream()得到InputStream()对象。最后要记得用disconnect

python学习之网络编程

。_饼干妹妹 提交于 2020-02-25 22:11:18
socket编程 本地进程间通信(IPC) • 队列 • 同步(互斥锁、条件变量等) • 管道 网络进程间通信 问题: 本地通过进程PID来唯一标识一个进程,在网络中如何唯一标识一个进程? 网络层的“IP地址”可以唯一标识网络中的主机,而传输层的“协议+端口” 可以唯一标识主机中的应用程序(进程)。因此利用IP地址,协议,端口就 可以标识网络的进程。 什么是socket? socket(简称套接字) 是进程间通信的一种方式, 能实现不同主机间的进程间通信,我们 网络上各种各样的服务大多都是基于 Socket 来完成通信的。 创建socket 在 Python 中 使用socket 模块的函数 socket 就可以完成: socket.socket(AddressFamily, Type) 1). Address Family: AF_INET: IPV4用于 Internet 进程间通信 AF_INET6: IPV6用于 Internet 进程间通信 2). Type:套接字类型 SOCK_STREAM: 流式套接字,主要用于 TCP 协议 SOCK_DGRAM: 数据报套接字,主要用于 UDP 协 议 01_socket对象的建立 import socket #1. 创建socket对象 #family: AF_INET(IPv4) AF_INET6(IPv6) ========