Java网络编程笔记5

Java网络编程笔记4中我们看到了客户端与服务器通信的过程,只是在前面的程序只是单个客户端与服务器通信 的例子。

接下来我们看如何实现多个客户端与服务器通信,对于服务器来说,它要为每个客户端请求的Socket建立一个线程,并通过它进行通信。

在这里创建一个线程类用来管理Socket:

<span style="font-size:18px;">public class ServerThread extends Thread {
	private Socket socket;
	private int num;
	public ServerThread(Socket socket,int num){
		this.socket=socket;
		this.num=num;
	}
	@Override
	public void run() {
		try {
			InputStream is=socket.getInputStream();
			OutputStream os=socket.getOutputStream();
			DataInputStream dis=new DataInputStream(is);
			String request=dis.readLine();
			System.out.println(request);
			PrintStream ps=new PrintStream(os);
			ps.print("这是服务器发来的---->");
			socket.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}</span>

接着运行主程序与客户端进行通信:

<span style="font-size:18px;">public class Server {

	public static void main(String[] args) {
		try {
			ServerSocket ss=new ServerSocket(3000);
			int clientnum=0;
			while(true){
				ServerThread st=new ServerThread(ss.accept(),clientnum);
				st.start();
				System.out.println(clientnum++);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}</span>

客户端与前面的并无差别:

<span style="font-size:18px;">public class Client {

	public static void main(String[] args) {
		try {
			Socket socket = new Socket("192.168.12.112", 3000);
			
			BufferedReader bfr = new BufferedReader(new InputStreamReader(
					socket.getInputStream()));
			String request=bfr.readLine();
			System.out.println(request);
			OutputStream outputStream = socket.getOutputStream();
			PrintStream printStream = new PrintStream(outputStream);
			printStream.print("Client--->");
			socket.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}</span>


转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/42803955   情绪控_ 


相关推荐
第1章 Java网络编程入门 1 1.1 进程之间的通信 1 1.2 计算机网络的概念 3 1.3 OSI参考模型 5 1.4 TCP/IP参考模型和 TCP/IP协议 8 1.4.1 IP协议 11 1.4.2 TCP协议及端口 14 1.4.3 RFC简介 15 1.4.4 客户/服务器通信模式 16 1.5Java编写客户/服务器程序 17 1.5.1 创建EchoServer 18 1.5.2 创建EchoClient 20 1.6 小结 22 1.7 练习题 23 第2章 Socket用法详解 25 2.1 构造Socket 25 2.1.1 设定等待建立连接的超时时间 26 2.1.2 设定服务器的地址 26 2.1.3 设定客户端的地址 27 2.1.4 客户连接服务器时可能抛出的异常 27 2.2 获取Socket的信息 30 2.3 关闭Socket 32 2.4 半关闭Socket 33 2.5 设置Socket的选项 38 2.5.1 TCP_NODELAY选项 38 2.5.2 SO_RESUSEADDR选项 38 2.5.3 SO_TIMEOUT选项 39 2.5.4 SO_LINGER选项 42 2.5.5 SO_RCVBUF选项 44 2.5.6 SO_SNDBUF选项 45 2.5.7 SO_KEEPALIVE选项 45 2.5.8 OOBINLINE选项 45 2.5.9 服务类型选项 45 2.5.10 设定连接时间、延迟和带宽的相对重要性 46 2.6 发送邮件的SMTP客户程序 47 2.7 小结 51 2.8 练习题 52 第3章 ServerSocket用法详解 55 3.1 构造ServerSocket 55 3.1.1 绑定端口 55 3.1.2 设定客户连接请求队列的长度 56 3.1.3 设定绑定的IP地址 58 3.1.4 默认构造方法的作用 58 3.2 接收和关闭与客户的连接 59 3.3 关闭ServerSocket 60 3.4 获取ServerSocket的信息 60 3.5 ServerSocket选项 62 3.5.1 SO_TIMEOUT选项 62 3.5.2 SO_REUSEADDR选项 63 3.5.3 SO_RCVBUF选项 64 3.5.4 设定连接时间、延迟和带宽的相对重要性 64 3.6 创建多线程的服务器 65 3.6.1 为每个客户分配一个线程 65 3.6.2 创建线程池 67 3.6.3 使用JDK类库提供的线程池 72 3.6.4 使用线程池的注意事项 74 3.7 关闭服务器 76 3.8 小结 80 3.9 练习题 81 第4章 非阻塞通信 83 4.1 线程阻塞的概念 83 4.1.1 线程阻塞的原因 83 4.1.2 服务器程序用多线程处理阻塞通信的局限 84 4.1.3 非阻塞通信的基本思想 85 4.2 java.nio包中的主要类 87 4.2.1 缓冲区Buffer 88 4.2.2 字符编码Charset 90 4.2.3 通道Channel 90 4.2.4 SelectableChannel类 92 4.2.5 ServerSocketChannel类 93 4.2.6 SocketChannel类 93 4.2.7 Selector类 96 4.2.8 SelectionKey类 97 4.3 服务器编程范例 100 4.3.1 创建阻塞的EchoServer 100 4.3.2 创建非阻塞的EchoServer 103 4.3.3 在EchoServer中混合用阻塞模式与非阻塞模式 110 4.4 客户端编程范例 114 4.4.1 创建阻塞的EchoClient 114 4.4.2 创建非阻塞的EchoClient 116 4.4.3 创建非阻塞的PingClient 120 4.5 小结 126 4.6 练习题 127 第5章 创建非阻塞的HTTP服务器 129 5.1 HTTP协议简介 129 5.1.1 HTTP请求格式 129 5.1.2 HTTP响应格式 132 5.1.3 测试HTTP请求 133 5.2 创建非阻塞的HTTP 服务器 137 5.2.1 服务器主程序: HttpServer类 137 5.2.2 具有自动增长的缓冲区的 ChannelIO类 138 5.2.3 负责处理各种事件的 Handler接口 140 5.2.4 负责处理接收连接就绪事件的AcceptHandler类 140 5.2.5 负责接收HTTP请求和发送HTTP响应的 RequestHandler类 141 5.2.6 代表HTTP请求的 Request类 143 5.2.7 代表HTTP响应的 Response类 145 5.2.8 代表响应正文的Content 接口及其实现类 147 5.2.9 运行HTTP服务器 149 5.3 小结 150 5.4 练习题 151 第6章 客户端协议处理框架 153 6.1 客户端协议处理框架的主要类 153 6.2 在客户程序中运用协议处理框架 154 6.2.1 URL类的用法 154 6.2.2 URLConnection类的用法 156 6.3 实现协议处理框架 160 6.3.1 创建EchoURLConnection 类 161 6.3.2 创建EchoURLStreamHandler 及工厂类 162 6.3.3 创建EchoContentHandler 类及工厂类 163 6.3.4 在EchoClient类中运用 ECHO协议处理框架 165 6.4 小结 166 6.5 练习题 167 第7章 用Swing组件展示 HTML文档 169 7.1 在按钮等组件上展示 HTML文档 170 7.2 用JEditorPane组件创建简单的浏览器 171 7.3 小结 179 7.4 练习题 179 第8章 基于UDP的数据报和套接字 181 8.1 UDP协议简介 181 8.2 DatagramPacket类 184 8.2.1 选择数据报的大小 185 8.2.2 读取和设置DatagramPacket 的属性 185 8.2.3 数据格式的转换 186 8.2.4 重用DatagramPacket 187 8.3 DatagramSocket类 189 8.3.1 构造DatagramSocket 189 8.3.2 接收和发送数据报 190 8.3.3 管理连接 190 8.3.4 关闭DatagramSocket 191 8.3.5 DatagramSocket的选项 191 8.3.6 IP服务类型选项 193 8.4 DatagramChannel类 193 8.4.1 创建DatagramChannel 194 8.4.2 管理连接 194 8.4.3 用send()方法发送数据报 194 8.4.4 用receive()方法接收数据报 195 8.4.5 用write()方法发送数据报 198 8.4.6 用read()方法接收数据报 199 8.5 组播Socket 202 8.5.1 MulticastSocket类 205 8.5.2 组播Socket的范例 207 8.6 小结 209 8.7 练习题 210 第9章 对象的序列化与反序列化 213 9.1 JDK类库中的序列化API 213 9.2 实现Serializable接口 218 9.2.1 序列化对象图 220 9.2.2 控制序列化的行为 222 9.2.3 readResolve()方法在单例类中的运用 229 9.3 实现Externalizable接口 231 9.4 可序列化类的不同版本的序列化兼容性 233 9.5 小结 235 9.6 练习题 236 第10章 Java语言的反射机制 239 10.1 Java Reflection API简介 239 10.2 在远程方法调用中运用反射机制 244 10.3 代理模式 248 10.3.1 静态代理类 248 10.3.2 动态代理类 250 10.3.3 在远程方法调用中运用代理类 253 10.4 小结 258 10.5 练习题 259 第11章 RMI框架 261 11.1 RMI的基本原理 262 11.2 创建第一个RMI应用 264 11.2.1 创建远程接口 264 11.2.2 创建远程类 265 11.2.3 创建服务器程序 267 11.2.4 创建客户程序 269 11.2.5 运行RMI应用 270 11.3 远程对象工厂设计模式 272 11.4 远程方法中的参数与返回值传递 277 11.5 回调客户端的远程对象 281 11.6 远程对象的并发访问 286 11.7 分布式垃圾收集 289 11.8 远程对象的equals()、 hashCode()和clone()方法 294 11.9 使用安全管理器 294 11.10 RMI应用的部署及类的动态加载 295 11.11 远程激活 297 11.12 小结 303 11.13 练习题 304 第12章 通过JDBC API 访问数据库 305 12.1 JDBC的实现原理 306 12.2 安装和配置MySQL 数据库 308 12.3 JDBC API简介 310 12.4 JDBC API的基本用法 314 12.4.1 处理字符编码的转换 317 12.4.2 把连接数据库的各种属性放在配置文件中 318 12.4.3 管理Connection、Statement 和ResultSet对象的生命周期 321 12.4.4 执行SQL脚本文件 326 12.4.5 处理SQLException 328 12.4.6 输出JDBC日志 329 12.4.7 获得新插入记录的主键值 329 12.4.8 设置批量抓取属性 330 12.4.9 检测驱动器使用的 JDBC版本 330 12.4.10 元数据 331 12.5 可滚动及可更新的结果集 333 12.6 行集 339 12.7 调用存储过程 346 12.8 处理Blob和Clob 类型数据 347 12.9 控制事务 351 12.9.1 事务的概念 351 12.9.2 声明事务边界的概念 353 12.9.3 在mysql.exe程序中声明事务 354 12.9.4 通过JDBC API 声明事务边界 356 12.9.5 保存点 357 12.9.6 批量更新 358 12.9.7 设置事务隔离级别 360 12.10 数据库连接池 362 12.10.1 创建连接池 363 12.10.2 DataSource数据源 369 12.11 小结 371 12.12 练习题 372 第13章 基于MVC和RMI的分布式应用 375 13.1 MVC设计模式简介 375 13.2 store应用简介 377 13.3 创建视图 381 13.4 创建控制器 389 13.5 创建模型 390 13.6 创建独立应用 394 13.7 创建分布式应用 395 13.8 小结 398 13.9 练习题 398 第14章 通过JavaMail API 收发邮件 401 14.1 E-mail协议简介 401 14.1.1 SMTP简单邮件传输协议 401 14.1.2 POP3邮局协议 402 14.1.3 接收邮件的新协议IMAP 402 14.1.4 MIME简介 403 14.2 JavaMail API简介 403 14.3 建立JavaMail应用程序的开发环境 405 14.3.1 获得JavaMail API 的类库 405 14.3.2 安装和配置邮件服务器 406 14.4 创建JavaMail 应用程序 408 14.5 身份验证 412 14.6 URLName类 416 14.7 创建和读取复杂电子邮件 418 14.7.1 邮件地址 419 14.7.2 邮件头部 420 14.7.3 邮件标记 421 14.7.4 邮件正文 422 14.8 操纵邮件夹 427 14.9 小结 432 14.10 练习题 433 第15章 安全网络通信 435 15.1 SSL简介 435 15.1.1 加密通信 436 15.1.2 安全证书 436 15.1.3 SSL握手 437 15.1.4 创建自我签名的安全证书 438 15.2 JSSE简介 439 15.2.1 KeyStore、KeyManager 与TrustManager类 442 15.2.2 SSLContext类 443 15.2.3 SSLServerSocketFactory 类 444 15.2.4 SSLSocketFactory类 444 15.2.5 SSLSocket类 444 15.2.6 SSLServerSocket类 447 15.2.7 SSLEngine类 448 15.3 创建基于SSL的安全服务器和安全客户 453 15.4 小结 457 15.5 练习题 457 第16章 CORBA简介 459 16.1 创建IDL接口 460 16.2 创建IDL接口的实现类 460 16.3 创建服务器程序 461 16.4 创建客户程序 462 16.5 运行CORBA程序 463 16.6 小结 464 16.7 练习题 465 第17章 Web服务简介 467 17.1 SOAP简介 467 17.2 建立Apache AXIS环境 469 17.3 在Tomcat上发布 Apache-AXIS Web应用 470 17.4 创建SOAP服务 471 17.4.1 创建提供SOAP 服务的Java类 471 17.4.2 创建SOAP服务的发布描述符文件 471 17.5 管理SOAP服务 472 17.5.1 发布SOAP服务 472 17.5.2 删除SOAP服务 473 17.6 创建和运行SOAP 客户程序 473 17.7 发布JWS服务 476 17.8 小结 476 17.9 练习题 477 附录A 本书范例的运行方法 479 A.1 本书所用软件的下载地址 479 A.2 部分软件的安装 479 A.2.1 安装JDK 480 A.2.2 安装ANT 480 A.2.3 安装Tomcat 481 A.3 编译源程序 481 A.4 运行客户/服务器程序 482
©️2020 CSDN 皮肤主题: 猿与汪的秘密 设计师:白松林 返回首页