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
查看全文
相关阅读:
sql server 跨库操作
FPGA使用技巧
MATLAB学习(3)
FPGA统计摄像头输出-基于MD9T112
zedboard VmodCAM 图像采集 HDMI输出显示
VmodCAM图像采集 VGA显示
EDK中如何使用ISE中生成的IP
如何将HDL文件实例化到XPS中
ubuntu下安装 Source insight
VmodCAM 初始化
原文地址:https://www.cnblogs.com/pony/p/1538642.html
最新文章
testNG retry 失败的testcase只需要在xml中配置一个listener即可
QTP Test ,VAPI-XP Test,LR Test 和ALM 集成远程分布式执行遇到的“access is denied ” “unspecified error”问题
10046 跟踪
Oracle中使用escape关键字实现like匹配特殊字符,以及&字符的转义
oracle 11g rac 无法自动启动
linux的HugePage与oracle amm关系
unison + inotify 实现文件实时双向同步部署步骤
python基础(1)
python的安装与配置
python断点
热门文章
运行报错:'_TestResult' object has no attribute 'outputBuffer'
python中使用multipart/form-data请求上传文件
js实现轮播
gulp小记(无刷新重载样式)
面试遇到的问题(被虐了就更新)
js事件小记
js 闭包
js 数据类型转换
使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建
NuGet 的使用
Copyright © 2011-2022 走看看