网络编程之一
基础知识:
IP协议又称互联网协议是互联网间互联的数据报协议,它提供网间连接的完善功能,包括IP数据报规定互联网络范围内的地址格式
TCP协议即传输控制协议,规定一种可靠的数据信息传递服务
IP地址是用于唯一标识网络中的一个通信实体,比如一台电脑,一台打印机,或者是路由器的某一个端口,而在基于IP协议网络中传输的数据包,都必须使用IP地址来进行标识
端口是一个16位整数,用于表示数据交给哪个通信程序进行处理0-65535
JAVA基本网络支持
1.使用InetAddress类来代表IP地址
2.使用URLDecoder和URLEndcoder用于完成普通字符串和MIME字符串之间的相互转换
3.只用URL和URLConnection
一旦获得了Url对象之后,就可以调用一些方法来访问该url对应的资源、
创建一个和URL的连接,并发送请求,读取此URL引用的资源需要如下几个步骤:
1.用url.openConnection()可以获得对应的urlconnection
2.设置urlconnection的参数和普通请求属性
3.如果只是发送get方式请求,则使用connect()方法建立和远程资源之间的实际连接既可,如果需要发送post方式的请求,则需要获取urlconnection实例对应的输出流来发送请求参数。
4.远程资源变为可用程序可以访问远程资源的头字段,或通过输入流读取远程资源的数据
在建立和远程资源的实际连接之前,程序可以通过一些方法来设置请求头字段
发送get请求时,只需要将请求参数放到url字符之后,以?隔开,程序直接调用urlconnection对象的connect()方法即可,如果程序要发送post请求,则需要先设置doin和doout两个请求头字段的值,再用Urlconnection对应的输出流来发送请求参数
基于TCP协议的网络编程
IP协议只保证计算机能够发送和接收分组数据,IP协议负责将消息从一个主机传送到另一个主机,消息在传送过程中被分割成一个个小包
TCP负责收集这些数据包,保证其正确连接,并且处理丢失等错误情况
使用ServerSocket创建TCP服务器端,用accept方法来监听来自客户端连接请求
客户端使用Socket来连接到指定的服务器
在服务器和客户端都会产生一个socket,socket提供了两个方法来获取输入流和输出流,getinputstream getoutputstream,还可以设置超时时长
当我们使用传统的bufferreader的readline方法读取数据时,在方法成功返回之前,线程被堵塞,程序无法继续执行,考虑到这个原因,服务器端应该为每一个socket单独启动一个线程,每一个线程都负责与客户端通信,从而引入多线程
记录用户信息 可以让客户端在发送不同信息之前,先对这些信息进行恰当处理,比如加一些特殊字符,我们成为协议字符,可以用一个接口专门定义协议字符,然后为了解决不同用户和他所发送的信息间的关联,我们可以用一个MAP来保存这样子的键值
半关闭的SOCKET
可以用socket提供的shutdowninput和shutdownoutput方法来进行关闭socket的输入流/输出流,使得socket在发送完信息,关闭输出流,来表示数据结束以后还能够接受数据
使用NIO实现非堵塞的socket通信
(待续)