网络编程

网络编程之socket新解

这一生的挚爱 提交于 2020-03-25 03:49:31
   由于工作并不是很忙,闲暇之余就读了下tomcat的源代码。我是从事java服务器开发工作的,大体的一些服务器线程模型我都是了解的。其大部分都是由一个线程调用监听端口等待客户端的链接,建立连接后再交由其他的线程负责具体的网络io操作。可tomcat居然是用多个线程调用同一个ServerSocket实例的accept方法。我读过mina也读过netty的源码,自己在大学时也写过不少的基于socket通信的程序,但是这种用法自己从未想过也从未见过。(恕本人咕噜寡闻了,-_-|||)不免好奇,这么做原来没问题啊?可这么做能有什么好处吗?   要明白这么做的道理,恐怖不得不去搞清楚套接字的accept方法底层到底干了什么,与TCP的三步握手又是什么关系。我查了一些资料大体把这些搞明白了,在这里记录下来以加强自己的认识,也同时共享给哪些跟我一样对socket的认识有所偏差的人。   一、首先说一下TCP三步握手的基本流程,如下图:   首先,请求端(客户端)发送一个包含SYN标志的TCP报文,SYN即同步(Synchronize),同步报文会指明客户端使用的端口以及TCP连接的初始序号;   第二步,服务器在收到客户端的SYN报文后,进入SYN-RECEVIED状态并将这个还没有完全建立起的连接放到半连接队列。还要返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一

Python 08--网络编程 Socket编程

旧街凉风 提交于 2020-03-25 03:48:43
本节内容: Socket语法及相关 SocketServer实现多并发  Socket语法及相关 socket概念 socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递。 我们知道网络 通信 都 是基于 ip+port 方能定位到目标的具体机器上的具体服务,操作系统有0-65535个端口,每个端口都可以独立对外提供服务,如果 把一个公司比做一台电脑 ,那公司的总机号码就相当于ip地址, 每个员工的分机号就相当于端口, 你想找公司某个人,必须 先打电话到总机,然后再转分机 。 建立一个socket必须至少有2端, 一个服务端,一个客户端, 服务端被动等待并接收请求,客户端主动发起请求, 连接建立之后,双方可以互发数据。 A network socket is an endpoint of a connection across a computer network . Today, most communication between computers is based on the Internet Protocol ; therefore most network sockets are Internet sockets . More precisely, a socket is a handle (abstract

Java入门网络编程-使用UDP通信

廉价感情. 提交于 2020-03-25 03:29:50
程序说明: 以下代码,利用java的网络编程,使用UDP通信作为通信协议,描述了一个简易的多人聊天程序,此程序可以使用公网或者是局域网进行聊天,要求有一台服务器。程序一共分为2个包,第一个包:udp,放置服务器端代码,包括:Server.java,第二个包:ui,放置客户端代码,包括:Login.java,Chat.java,Sender.java,Reciever.java,Test.java,期中Chat与Login为ui界面。 没有公网服务器的同学可以选择阿里云租赁【可以选择云翼计划】【非广告】,或者使用局域网,此代码使用公网ip测试成功,没有试过局域网,感兴趣的同学可以试一试。 具体代码: Server.java: 1 package udp; 2 3 import java.io.IOException; 4 import java.io.UnsupportedEncodingException; 5 import java.net.*; 6 import java.util.LinkedList; 7 import java.util.List; 8 9 public class Server 10 { 11 12 public static void main(String[] args) 13 { 14 new Thread(new Server_Run())

javaAPI_网络编程基础_网络编程基础1

爷,独闯天下 提交于 2020-03-25 03:22:32
网络编程基础 1.网络编程概述 (1).计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件 及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 (2).网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 2.网络模型概述以及图解 (1).计算机网络之间以何种规则进行通信,就是网络模型研究问题. (2).网络模型一般是指 OSI(Open System Interconnection开放系统互连)参考模型 TCP/IP参考模型 (3).图解 3.网络编程三要素 (1).IP地址: 网络中计算机的唯一标识。 计算机只能识别二进制的数据,所以我们的IP地址应该是一个二进制的数据。 但是呢,我们配置的IP地址确不是二进制的,为什么呢? IP:192.168.1.100 换算:11000000 10101000 00000001 01100100 假如真是:11000000 10101000 00000001 01100100的话。 我们如果每次再上课的时候要配置该IP地址,记忆起来就比较的麻烦。 所以,为了方便表示IP地址,我们就把IP地址的每一个字节上的数据换算成十进制,然后用.分开来表示: "点分十进制" IP地址的组成:网络号段+主机号段 A类:第一号段为网络号段

Py西游攻关之Socket网络编程

十年热恋 提交于 2020-03-25 03:11:13
新闻 管理 Py西游攻关之Socket网络编程 知识预览 计算机网络 回到顶部 网络通信要素 : A:IP地址 (1) 用来标识网络上一台独立的主机 (2) IP地址 = 网络地址 + 主机地址(网络号:用于识别主机所在的网络/网段。主机号:用于识别该网络中的主机) (3) 特殊的IP地址: 127.0.0.1 (本地回环地址、保留地址,点分十进制) 可用于简单的测试网卡是否故障。表示本机。 B:端口号: (1) 用于标识进程的逻辑地址。不同的进程都有不同的端口标识。 (2) 端口: 要将数据发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识。为了方便称呼这些数字,则将这些数字称为端口。(此端口是一个逻辑端口) C: 传输协议 : 通讯的规则。例如:TCP、UDP协议(好比两个人得用同一种语言进行交流) ①、UDP:User Datagram Protocol用户数据报协议 特点: 面向无连接:传输数据之前源端和目的端不需要建立连接。 每个数据报的大小都限制在64K(8个字节)以内。 面向报文的不可靠协议。(即:发送出去的数据不一定会接收得到) 传输速率快,效率高。 现实生活实例:邮局寄件、实时在线聊天、视频会议…等。 ②、TCP:Transmission Control Protocol传输控制协议 特点: 面向连接:传输数据之前需要建立连接

Java 网络编程的一些概念

你。 提交于 2020-03-23 20:42:01
网络编程:实现连接到网络的计算机之间的网络通信,比如QQ的聊天、传文件。 ip:一台计算机在网络中的唯一标识 查看本机ip:windows是ipconfig,linux是ifconfig ipv4:4个整数,0-255之间,点号分隔,比如192.168.1.1,约42亿个地址,2011年初已耗尽 ipv6:8组,每组4个16进制数,冒号分隔,比如ABCD:0000:2C4F:0000:0000:EF01:2345:6789 如果一组全是0,可缺省,上面的地址可简写为ABCD :: 2C4F:0000:0000:EF01:2345:6789,但只能缺省一次(只能出现一次::) 也可以简写为ABCD:0000:2C4F :: EF01:2345:6789,缺省了2组0 本地回路地址:127.0.0.1(ipv4) ::1(ipv6) 广播地址:255.255.255.255 端口号:唯一标识一台机器上的某个程序。ip确定是哪台机器,port确定是这台机器上的哪个程序。 范围:0-65535,尽量使用1024以上的端口号,1024以下的基本都被OS用了。 协议: TCP 面向连接(3次握手),数据安全(需要对方存在、且已启动才能进行通信),因为要保证传输安全,所以传输速度略慢,要区分客户端、服务端。 UDP 无连接,数据不安全(直接发送数据,不管对方是否存在、是否已启动),速度快

计算机编程经典书籍

放肆的年华 提交于 2020-03-23 01:58:49
各种计算机语言的经典书籍 1、Java Java编程语言(第三版)---Java四大名著----James Gosling(Java之父) Java编程思想(第2版)----Java四大名著----Bruce Eckel Java编程思想(第3版)----Java四大名著----------------Bruce Eckel JAVA 2核心技术 卷I:基础知识(原书第7版)---Java四大名著-----Cay Horstmann JAVA 2核心技术 卷II:高级特性(原书第7版)----Java四大名著-----Cay Horstmann Effective Java中文版------Java四大名著--------Joshua Bloch 精通Struts:基于MVC的Java Web设计与开发---孙卫琴 精通Hibernate:Java对象持久化技术详解---孙卫琴 Tomcat与Java Web开发技术详解------------孙卫琴 Java与模式------------------------------阎宏 2、c# C#程序设计-------Charles Petzold“windows编程泰山北斗”---C#语言“倚天屠龙双剑” C# Primer中文版--------Stanley B.Lippman---C#语言“倚天屠龙双剑” .NET框架程序设计

计算机经典书籍

*爱你&永不变心* 提交于 2020-03-23 00:14:59
1、Java Java编程语言(第三版)---Java四大名著----James Gosling(Java之父) Java编程思想(第2版)----Java四大名著----Bruce Eckel Java编程思想(第3版)----Java四大名著----------------Bruce Eckel JAVA 2核心技术 卷I:基础知识(原书第7版)---Java四大名著-----Cay Horstmann JAVA 2核心技术 卷II:高级特性(原书第7版)----Java四大名著-----Cay Horstmann Effective Java中文版------Java四大名著--------Joshua Bloch 精通Struts:基于MVC的Java Web设计与开发---孙卫琴 精通Hibernate:Java对象持久化技术详解---孙卫琴 Tomcat与Java Web开发技术详解------------孙卫琴 Java与模式------------------------------阎宏 2、c# C#程序设计-------Charles Petzold“windows编程泰山北斗”---C#语言“倚天屠龙双剑” C# Primer中文版--------Stanley B.Lippman---C#语言“倚天屠龙双剑” .NET框架程序设计(修订版)-------

网络编程(2)

风流意气都作罢 提交于 2020-03-22 18:26:38
文件传输 基础文件传输(小文件) # server端负责接收 import socket import json sk = socket.socket() sk.bind(('127.0.0.1', 5002)) sk.listen() conn, addr = sk.accept() msg_f = conn.recv(1024).decode('UTF-8')# 接收client端的文件信息 dic_f = json.loads(msg_f)# json.loads()用于将字符串形式的数据转化为字典 with open(dic_f['filename'], mode='wb') as f: file = conn.recv(dic_f['filesize'])# 以发送过来的文件大小接收文件 f.write(file) conn.close() sk.close() ############################################## # client端负责发送 import socket import os import json sk = socket.socket() sk.connect(('127.0.0.1', 5002)) abs_path = r'D:\1.jpg' filename = os.path.basename(abs

网络编程

久未见 提交于 2020-03-22 03:51:39
InetAddress import java.net.InetAddress; import java.net.UnknownHostException; public class test01 { /** * 端口号与IP地址的组合得出一个网络套接字:Socket * * 1. 本地回路地址:127.0.0.1 对应着:localhost * 2. InetAddress的两个实例化方法:getByName(String host)、getLocalHost() * 3. InetAddress的两个常用方法:getHostName()、getHostAddress() * @param args */ public static void main(String[] args) throws UnknownHostException { InetAddress inet1 = InetAddress.getByName("192.168.10.23"); System.out.println(inet1); InetAddress inet2 = InetAddress.getByName("www.baidu.com"); System.out.println(inet2); InetAddress inet3 = InetAddress.getByName("127.0