TCP Socket简单模拟多线程
来源:互联网 发布:软件创新之路 编辑:程序博客网 时间:2024/06/04 18:24
package com.atolance.threadtcp;import java.io.DataOutputStream;import java.io.IOException;import java.net.Socket;public class TcpClient { public static void main(String[] args) throws IOException {Socket socket = new Socket("192.168.0.12", 8888);DataOutputStream ds = new DataOutputStream(socket.getOutputStream());ds.writeUTF("核打击");ds.flush();ds.close();socket.close(); }}
使用循环来模拟多线socket连接
服务器端代码:
package com.yaoxun.threadtcp;import java.io.DataInputStream;import java.net.ServerSocket;import java.net.Socket;public class TcpServer {public static void main(String[] args) throws Exception {ServerSocket serverSocket = new ServerSocket(8888);int i = 0;while(true) {Socket socket = serverSocket.accept();i ++;System.out.println("第"+i+"个客户端连接成功");//DataInputStream方便读取数据DataInputStream dataInputStream = new DataInputStream(socket.getInputStream());System.out.println(dataInputStream.readUTF());//读出流中的数据,DataInputStream对象的readUTF()方法可以读出流中的数据,而且支持中文 socket.close();dataInputStream.close();}}}
以上代码利用Socket对象和ServerSocket对象进行简单的网络交互,即客户端通过DataOutputStream对象的writeUTF()方法向服务器发送消息,服务器利用DataInputStream对象的readUTF()方法读出数据。
看上去挺好,但ServerSocket对象的accept()方法是阻塞的方法,它会一直等待,直到有客户端连接。
同理,DataInputStream对象的readUTF()方法也是阻塞的方法,它也会一直等待,直到客户端调用writeUTF()方法。
因此,假如某个客户端成功连接服务器,但是迟迟不调用writeUTF()方法发送数据,服务器就要一直等待,直到客户端调用writeUTF()方法为止,此期间整个服务器是阻塞的,无法再接受其他客户端连接,显然这不符合实际情况。
0 0
- TCP Socket简单模拟多线程
- 简单模拟多线程Socket通信(java)
- 简单模拟多线程Socket通信(java)
- java 多线程,socket 简单模拟聊天软件
- Java(Socket tcp方式 多线程模拟 tomcat)
- 简单实现基于TCP的Socket多线程通信
- Socket —— 通过多线程简单模拟了聊天室
- 多线程tcp聊天模拟
- 多线程TCP socket服务器
- TCP socket 简单实现
- socket简单java模拟
- Socket Server: TCP 多线程版
- java模拟多线程socket通信
- PHP简单模拟多线程
- 简单实现多线程Socket
- JavaSE练习-多线程、Socket(TCP协议)、IO流模拟实现服务端多线程接收客户端上传图片
- SOCKET TCP的简单应用
- 简单socket 文件收发(tcp)
- Android -- ImageLoader本地缓存
- Oracle使用connect by循环查询从某个时间到某个时间的时间
- install cocoapods
- C#连接数据库在控制台输出结果集(示例)
- jquery .parents()和.parent() 方法
- TCP Socket简单模拟多线程
- 学习c++函数
- Java学习笔记 —— 20
- 解决ORA-28002: 密码几天之后过期办法
- Android 布局学习之——LinearLayout的layout_weight属性
- uva 10361
- Android UI布局之TableLayout
- Mac和iOS开发资源汇总
- Mac OS X 软件包管理器 – Homebrew