java网络编程

    技术2025-10-15  7

    IP地址如192.166.3.4包含了两部分,一是主机地址也就是192.166.3.4,另一部分是网络(子网)的地址。如何确定子网的地址呢?这就需要用到掩码,将掩码与IP地址进行&操作,得到的结果就是子网地址。假设掩码为255.255.255.0,那么子网地址就是192.166.3.0,如果掩码为255.255.0.0那么子网地址就是192.166.0.0。注意掩码总是左边为1,右边为0。TCP/IP四层模型:应用层: FTP TELNET HTTP, SNMP DNS传输层: TCP, UDP网络互联层: IP主机-网络层:以太网,令牌环网TCP(可靠传输)和UDP(非可靠传输)的端口是互相独立的,互不干扰。最简单的server和client程序:见第一章代码EchoServer.java和EchoClient.javaserver使用ServerSocket类。ServerSocket server = new ServerSocket(8000);然后不断检查是否有客户端发来的socket:while(true) {try { Socket socket = server.accept(); ....}}accept方法会一直阻塞,直到有客户端连接为止。一旦获取了socket,就可以通过socket的I/OStream,进行读写。ServerSocket可以设置尚未处理的socket队列的最大长度。客户端创建连接Socket socket = new Socket("localhost",8000);//"localhost"或"127.0.0.1"表示本机然后便可以使用I/OStream进行读写客户端的端口由操作系统随机分配。Socket的IOStream关闭并不意味着Socket的关闭,因为端口等资源还在占用着。Socket调用close时,底层的socket可能要延迟一段时间,处理完剩下的数据才关闭;同时如果一个新启动的程序想要绑定到此端口将会失败。可以通过setReuseAddress、getSoLinger来进行设置。还可设置服务类型setTrafficClass,如低成本、高可靠性、高吞吐量、最小延迟。Socket使用TCP传输各种协议的详细描述见RFCInetAddress类提供了很多有用的静态方法用于创建和解析IP地址。第三章 ServerSocketServerSocket一般使用固定端口,但也可能使用匿名端口。比如ftp服务,会使用两个tcp连接,一个为控制连接,一个为传输连接,传输连接就有可能使用不固定端口。创建多线程服务器: 可以为每一个客户连接建立一个线程,使得客户之间无需等待。使用Excutors类提供的各种线程池。关闭服务器:直接ctrl+c关闭的话,会导致尚未处理完的任务中断,应该通过一个单独的线程来发送控制命令。在服务器程序中简历两个ServerSocket,监听不同的端口,一个负责处理客户连接(1),另外一个负责处理控制命令(2)。ServerSocket(2)接收到一个shutdown命令时,便会将线程池设为不再接收新任务,并且等待目前任务处理完之后关闭服务器。 当然,还需要一个AdminClient的程序,负责与ServerSocket(2)建立socket连接,并发送命令。编码和解码编码Charset charset = Carset.forName("GBK");ByteBuffer buf = charset.encode("hello");解码CharBuffer cbuf = charset.decode(buf);String s = cbuf.toString();

    最新回复(0)