Java网络编程(读书笔记)】的更多相关文章

Java网络编程,我们先来看下面这一张图: 由图可得:想要进行网络编程,首先是服务器端通过ServerSocket对某一个端口进行监听.通过accept来判断是否有客户端与其相连.若成功连上,则通过readline和println函数来进行数据的发送和接收.实现网络编程. 示例如下: 服务器端代码: /* * 功能:演示Java网络编程的服务器端 * author:ywq */ import java.io.*; import java.net.*; public class TestServe…
会集中这段时间写UNIX网络编程这本书的读书笔记,准备读三本,这一系类的文章会不断更新,一直会持续一个月多,每篇的前半部分是书中讲述的内容,每篇文章的后半部分是自己的心得体会,文章中的红色内容是很重要的部分. http://blog.csdn.net/yusiguyuan/article/details/11760187 UNIX网络编程---简介…
----------------------------------------------<Java并发编程实战>读书笔记------------------------------------------------------------------------------ 第二章 线程安全性 java同步 1.sychronized  2.volatile类型  3.显示锁  4.原子变量性能优化之原则:首先保证代码能正确运行,然后再提高代码速度.并且,只是当性能测试结果和应用需求需要…
第一章: C/C++语言提供两种不同的编程模式:IPL32和PL64.► IPL32 ● 表示integer/pointer/long三种数据类型是32位(4个字节),在这种模式下,提供32位的地址空间,理论的内存使用限制为4G.► PL64 ● 表示pointer/long两种数据类型是64位(8个字节),提供64位地址空间,使用内存超过4G(达2^60bytes=1EB). more infoabout IPL32 and PL64, please refer to http://www-3…
本篇主干内容是TCP/IP网络编程1-9章学习笔记 1. linux文件描述符 描述符从3开始以由小到大的顺序编号,0,1,2,分配给标准I/O用作标准输入.标准输出和标准错误. 2. 协议族与套接字类型(socket函数第一.二个参数) domain常用 : IPv4协议族 PF_INET: type: SOCK_STREAM(面向连接,TCP), SOCK_DRGAM(面向消息, UDP) 选用TCP时,第三个参数可以为0. 3.地址族与数据序列 4字节IP地址分类: A类地址: 首字节范围…
概述 应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket).http://www.cnblogs.com/nufangrensheng/p/3583435.html. 原始套接口是一种对原始网络报文进行处理的套接口.原始套接口主要应用在底层网络编程上,同时也是网络黑客的必备手段.例如sniffer.拒绝服务(DoS).IP地址欺骗等都需要在原始套接字的基础上实现. 与原始套接字对应,之前的TCP/UDP的套接字称为标准套接字,如下图所示,为标准套接字与原始…
概述 有很多方法来获取和设置影响套接口的选项: getsockopt和setsockopt函数 fcntl函数 ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接口. #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, i…
认知套接口编程接口 理解原始套接口(raw socket)的概念   值得注意的是,客户和服务器是典型的用户进程,而TCP和IP协议则通常是系统内核协议栈的一部分. 上图中在TCP和UDP之间留有间隙,用于指出应用程序可以绕过传输层而直接使用IPv4和IPv6,这称为原始套接口(raw socket). UNIX网络编程中所说的套接口编程接口是应用层到传输层的接口.UNIX网络编程的焦点是:如何使用套接口编写使用TCP或UDP的网络应用程序.…
1.进程之间的通信 进程是指运行中的程序,进程的任务就是执行程序中的代码. 存在计算机网络上的两个进程只需要关注它们通信的具体内容,而不需关注消息在网络上传输的具体细节. 2.计算机网络的概念 Internet提供的服务包括www服务,电子邮件服务,文件传输服务(FTP),远程登录服务(Telnet). 全球用户可以通过或这些服务来获取Internet上的信息,或者开展各种业务. 3.udp和tcp 两个进程可以占用同样的端口号,但是必须是不同的运输层协议,比如一个进程使用的是TCP协议,占用7…
1. 一些原则 RIM(Remote Method Invocation):远程方法调用 Race Condition:竞态条件 Servlet要满足多个线程的调用,必须是线程安全的 远程对象,即通过远程方法调用将对象放入字节流中传给其他jvm的对象,要特别注意对象中的共享状态 Shared:共享的 Mutable:可变的 当设计线程安全的类时,良好的面向对象技术.不可修改性,以及明晰的不变性规范都能起到一定的帮助作用: 无状态对象是线程安全的:没有任何域也不包含任何对其他类中域的引用(比如St…
第三章 套接字编程简介 每一个 Socket 都用一个半相关描述:{协议,本地地址,本地端口}一个完整的 Socket 则用一个相关描述{协议,本地地址,本地端口,远程地址,远程端口}每一个 Socket 有一个本地的唯一 Socket 号,由操作系统分配. 1.struct sockaddr这个结构用来存储套接字地址.数据定义: struct sockaddr { unsigned short sa_family; /* address族, AF_xxx */ ]; /* 14 bytes的协…
1.IP地址 IP地址组成:网络号段+主机号段 IP地址分类: A类:第一号段为网络号段+后三段的主机号段 1.0.0.1---127.255.255.254(10.x.x.x是私有地址) 一个网络号可分配256*256*256个IP B类:前二号段为网络号段+后二段的主机号段 128.0.0.1---191.255.255.254(172.16.0.0---172.31.255.255是私有地址) 一个网络号可分配256*256个IP C类:前三号段为网络号段+后一段的主机号段(常用) 192…
I/O模型 UNIX下可用的5种I/O模型: (1)阻塞I/O (2)非阻塞I/O (3)I/O复用(select和poll) (4)信号驱动I/O(SIGIO) (5)异步I/O 对于一个套接口上的输入操作,第一步通常涉及等待数据从网络中到达.当所等待分组到达时,它被拷贝到内核中的某个缓冲区.第二步就是把数据从内核缓冲区拷贝到应用进程缓冲区. 1.阻塞I/O模型 最流行的I/O模型是阻塞I/O(blocking I/O)模型.缺省情况下,所有套接口都是阻塞的. 以数据报套接口作为例子,我们有下…
第四章 基本tcp 套接口编程 注意区分AF_XXX 和PF_XXX,AF代表address family, PF代表protocol family. 1 socket 函数 2 connect 函数 3 bind 函数 4 listen 函数 注:主动.被动 与 服务器.客户端没有明确的对应关系 linux中定义backlog为 完成队列的最大个数 5 accept 函数 5 getsockname和getpeername的用法及实例 getsockname和getpeername #incl…
概述 UNIX域协议并不是一个实际的协议族,而是在单个主机上执行客户/服务器通信的一种方法,所用API与在不同主机上执行客户/服务器通信所用的API(套接口API)相同.UNIX域协议可视为进程间通信(IPC)方法之一. UNIX域提供两类套接口:字节流套接口(类似TCP)和数据报套接口(类似UDP). 使用UNIX域套接口的理由有3个: 在源自Berkeley的实现中,UNIX域套接口往往比通信两端位于同一主机的TCP套接口快出一倍. UNIX域套接口可用于在同一个主机上的不同进程间传递描述字…
概述 在名字和数值地址间进行转换的函数: gethostbyname和gethostbyaddr:在主机名字与IPv4地址之间进行转换.仅仅支持IPv4. getservbyname和getservbyport:在服务名字和端口号之间进行转换. getaddrinfo和getnameinfo:用于主机名字和IP地址之间以及服务名字和端口号之间的转换.(这两个函数是协议无关的) 域名系统 域名系统(Domain Name System,简称DNS)主要用于主机名字和IP地址之间的映射. 资源记录…
概述 SCTP是一个较新的传输协议,于2000年在IETF得到标准化(TCP是在1981年标准化的).它最初是为满足不断增长的IP电话市场设计的:具体地说,就是穿越因特网传输电话信令. SCTP是一个可靠的面向消息的协议,在端点之间提供多个流,并为多宿提供传输级支持. 尽管SCTP和TCP之间存在一些本质性的差别,然而SCTP的一到一(one-to-one)接口与TCP提供的应用接口非常接近.这一点允许轻而易举地移植应用程序,不过没法使用SCTP的某些高级特性.SCTP的一到多(one-to-m…
概述 使用UDP编写的一些流行的应用程序有:DNS(域名系统).NFS(网络文件系统)和SNMP(简单网络管理协议). 如下图所示,给出了典型的UDP客户/服务器程序的函数调用: 客户不与服务器建立连接,而是只管使用sendto函数给服务器发送数据报,其中必须作为参数指定目的地(即服务器)的地址.类似地,服务器不接受来自客户的连接,而是只管调用recvfrom函数,等待来自某个客户的数据到达.recvfrom将与所接收的数据报一道返回客户的协议地址,因此服务器可以把响应发送给正确的客户. rec…
终止网络连接的通常方法是调用close函数.不过close有两个限制,却可以使用shutdown来避免. close 把描述字的引用计数减1,仅在该计数变为0时才关闭套接口.使用shutdown可以不管引用计数就激发TCP的正常连接终止序列(由FIN开始的四个分节). close 终止数据传送的两个方向:读和写.既然TCP连接是全双工的,有时候我们需要告知对端我们已经完成了数据发送,即使对端仍有数据要发送给我们.下图展示了这样的情况下典型的函数调用. #include <sys/socket.h…
编写一个完整的TCP客户和服务器程序所需要的基本套接口函数: 1.socket函数(客户端.服务器端都必须调用) 参数family指明协议族(family),该参数也往往被称为协议域(domain).所以有的书上声明如下: 而且对于socket函数第一个参数,在不同书籍上可能会看到不同前缀的取值常量列表,如下两图所示: AF_xxx与PF_xxx: AF_前缀表地址族,PF_前缀表示协议族.历史上曾有这样的想法:单个协议族可以支持多个地址族,PF_值用来创建套接口,而AF_值用于套接口地址结构.…
地址格式转换函数:它们在ASCII字符串(人们比较喜欢用的格式)与网络字节序的二进制值(此值存于套接口地址结构中)间转换地址. 1.inet_aton.inet_addr.inet_ntoa inet_aton.inet_addr和inet_ntoa在点分十进制数串(例如,"206.168.112.96")与它的32位网络字节序二进制值间转换IPv4地址. #include <arpa/inet.h> int inet_aton(const char *strptr, st…
前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以"sockaddr_"开头,并以对应每个协议族的唯一后缀结束. IPv4套接口地址结构 IPv4套接口地址结构通常也称为"网际套接口地址结构",它以"sockaddr_in"命名,定义在头文件<netinet/in.h>中.其POSIX定义如下: /* sockaddr_in */ struct in_addr…
package QQ; import java.util.LinkedList; /** * Created by hu on 2015/11/9. */ public class ThreadPool extends ThreadGroup{ //线程池是否关闭 private boolean isClosed=false; //表示工作队列 private LinkedList<Runnable> workQueue; //表示线程池ID private static int thread…
1.Socket有多种构造方法,大多数构造方法在构造的时候就指定了连接的主机和端口号.当客户端的构造方法与服务器连接的时候,可能需要等待一段时间,因为需要建立连接.默认情况下,Socket的构造方法会一直等待下去,直到连接成功或者是出现异常.Socket的构造方法请求连接的时候,受到底层网络传输速度的影响,可能长时间处于等待状态.如果希望限定等待时间,就需要一个无参的构造方法,可以如下做: Socket socket=new Socket(); SocketAdress remoteAddr=n…
辅助数据(ancillary data)可通过调用sendmsg和recvmsg这两个函数,使用msghdr结构中的msg_control和msg_controllen这两个成员发送和接收. 辅助数据的另一个称谓是控制信息(control information). 辅助数据由一个或多个辅助数据对象(ancillary data object)构成,每个对象以一个定义在头文件<sys/socket.h>中的cmsghdr结构开头. struct cmsghdr { socketlen_t cm…
这两个函数是最通用的I/O函数.实际上我们可以把所有read.readv.recv和recvfrom调用替换成recvmsg调用.类似地,各种输出函数调用也可以替换成sendmsg调用. #include <sys/socket.h> ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); ssize_t sendmsg(int sockfd, struct msghdr *msg, int flags); 返回:读入或写出字节数…
这两个函数类似于read和write,不过readv和writev允许单个系统调用读入到或写出自一个或多个缓冲区.这些操作分别称为分散读(scatter read)和集中写(gather write),因为来自读操作的输入数据被分散到多个应用缓冲区中,而来自应用缓冲区的输出数据则被集中提供给单个写操作. #include <sys/uio.h> ssize_t readv(int filedes, const struct iovec *iov, int iovcnt); ssize_t wr…
这两个函数类似于标准的read和write函数,不过需要一个额外的参数. #include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags); 返回:读入或写出字节数--成功:---出错 recv和send的前3个参数等同于read和write的3个参…
poll函数提供的功能与select类似,不过在处理流设备时,它能够提供额外的信息. poll函数原型 #include <poll.h> int poll(struct pollfd *fdarray, unsigned long nfds, int timeout); 返回:就绪描述字的个数,--超时,---出错 poll函数参数介绍 第一个参数是指向一个结构数组第一个元素的指针.每个数组元素都是一个pollfd结构,用于指定测试某个给定描述字fd的条件. struct pollfd {…
函数原型 pselect函数是由POSIX发明的,其原型如下: #include <sys/select.h> #include <signal.h> #include <time.h> int pselect (int maxfdpl, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timespec *timeout, const sigset_t *sigmask); 返回值:就…