zoukankan
html css js c++ java
【z】多线程Java Socket编程示例
1.服务端
package
sterning;
import
java.io.BufferedReader;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.InputStreamReader;
import
java.io.OutputStream;
import
java.io.PrintWriter;
import
java.net.
*
;
import
java.util.concurrent.
*
;
public
class
MultiThreadServer
{
private
int
port
=
8821
;
private
ServerSocket serverSocket;
private
ExecutorService executorService;
//
线程池
private
final
int
POOL_SIZE
=
10
;
//
单个CPU线程池大小
public
MultiThreadServer()
throws
IOException
{
serverSocket
=
new
ServerSocket(port);
//
Runtime的availableProcessor()方法返回当前系统的CPU数目.
executorService
=
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()
*
POOL_SIZE);
System.out.println(
"
服务器启动
"
);
}
public
void
service()
{
while
(
true
)
{
Socket socket
=
null
;
try
{
//
接收客户连接,只要客户进行了连接,就会触发accept();从而建立连接
socket
=
serverSocket.accept();
executorService.execute(
new
Handler(socket));
}
catch
(Exception e)
{
e.printStackTrace();
}
}
}
public
static
void
main(String[] args)
throws
IOException
{
new
MultiThreadServer().service();
}
}
class
Handler
implements
Runnable
{
private
Socket socket;
public
Handler(Socket socket)
{
this
.socket
=
socket;
}
private
PrintWriter getWriter(Socket socket)
throws
IOException
{
OutputStream socketOut
=
socket.getOutputStream();
return
new
PrintWriter(socketOut,
true
);
}
private
BufferedReader getReader(Socket socket)
throws
IOException
{
InputStream socketIn
=
socket.getInputStream();
return
new
BufferedReader(
new
InputStreamReader(socketIn));
}
public
String echo(String msg)
{
return
"
echo:
"
+
msg;
}
public
void
run()
{
try
{
System.out.println(
"
New connection accepted
"
+
socket.getInetAddress()
+
"
:
"
+
socket.getPort());
BufferedReader br
=
getReader(socket);
PrintWriter pw
=
getWriter(socket);
String msg
=
null
;
while
((msg
=
br.readLine())
!=
null
)
{
System.out.println(msg);
pw.println(echo(msg));
if
(msg.equals(
"
bye
"
))
break
;
}
}
catch
(IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if
(socket
!=
null
)
socket.close();
}
catch
(IOException e)
{
e.printStackTrace();
}
}
}
}
2.客户端
package
sterning;
import
java.io.BufferedReader;
import
java.io.IOException;
import
java.io.InputStreamReader;
import
java.io.OutputStream;
import
java.net.Socket;
import
java.util.concurrent.ExecutorService;
import
java.util.concurrent.Executors;
public
class
MultiThreadClient
{
public
static
void
main(String[] args)
{
int
numTasks
=
10
;
ExecutorService exec
=
Executors.newCachedThreadPool();
for
(
int
i
=
0
; i
<
numTasks; i
++
)
{
exec.execute(createTask(i));
}
}
//
定义一个简单的任务
private
static
Runnable createTask(
final
int
taskID)
{
return
new
Runnable()
{
private
Socket socket
=
null
;
private
int
port
=
8821
;
public
void
run()
{
System.out.println(
"
Task
"
+
taskID
+
"
:start
"
);
try
{
socket
=
new
Socket(
"
localhost
"
, port);
//
发送关闭命令
OutputStream socketOut
=
socket.getOutputStream();
socketOut.write(
"
shutdown\r\n
"
.getBytes());
//
接收服务器的反馈
BufferedReader br
=
new
BufferedReader(
new
InputStreamReader(socket.getInputStream()));
String msg
=
null
;
while
((msg
=
br.readLine())
!=
null
)
System.out.println(msg);
}
catch
(IOException e)
{
e.printStackTrace();
}
}
}
;
}
}
origin:
http://www.blogjava.net/sterning/archive/2007/10/15/152940.html
查看全文
相关阅读:
上海社保,统筹内不能转出的疑惑
c# 代理IP获取通用方法
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
前端实现打印功能
elementUI表格合并单元格
webpack打包图片资源找不到问题
Webstorm/IntelliJ Idea 过期破解方法
ES6 Promise 用法讲解
移动端开发
Stylus的基础用法
原文地址:https://www.cnblogs.com/pony/p/1538642.html
最新文章
Linux网络配置
Makefile的制作
Linux 动态库 静态库
Linux中C语言的编程
gcc static静态编译选项提示错误:/usr/lib/ld:cannot find -lc
exit和return的区别
【多线程】聊天室的实现
I/O复用服务器端+回声客户端
【LeetCode-128】Longest Consecutive Sequence
【小米oj】找出单独的数字
热门文章
多进程回声服务器/客户端【linux】
【CodeForces
jqgrid postData setGridParam 调用多次时查询条件累加的问题--详情页查询导致的无法在新的页面中查询
关于asp.net mvc中 weiui gallery中IOS 下不显示预览图片问题的解决方式
上海公积金销户问题--程序员
EF for oracle中无法读取配置 显示无法open问题解决方式
干净的 ef for Oracle appconfg配置
Pl/sql 导入数据错位问题
List<t>中如何将指定元素的值放到第一位
table 中实现 控制 指定列的 左对齐 右对齐方式
Copyright © 2011-2022 走看看