Cyh的博客
Email:kissyan4916@163.com
posts - 26, comments - 19, trackbacks - 0, articles - 220
导航
BlogJava
首页
新随笔
联系
聚合
管理
公告
一直努力努力努力,像奴隶奴隶奴隶!~~
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的文章
我的评论
我的参与
最新评论
随笔档案
(25)
2011年5月 (1)
2010年4月 (12)
2010年1月 (1)
2009年12月 (2)
2009年6月 (1)
2009年4月 (4)
2009年2月 (4)
文章分类
(219)
Android(26)
DB(5)
J2EE(31)
J2SE(79)
JavaScript(15)
others(47)
SOA&Web Service(1)
中间件(1)
软件工程(12)
软件架构(2)
文章档案
(220)
2011年8月 (1)
2010年12月 (23)
2010年11月 (2)
2010年8月 (5)
2010年7月 (2)
2010年6月 (2)
2010年5月 (1)
2010年4月 (12)
2010年3月 (28)
2010年2月 (5)
2010年1月 (23)
2009年12月 (39)
2009年6月 (14)
2009年5月 (31)
2009年3月 (2)
2009年2月 (29)
2009年1月 (1)
新闻档案
(66)
2010年10月 (1)
2010年9月 (5)
2010年8月 (11)
2010年7月 (21)
2010年6月 (13)
2010年5月 (8)
2010年4月 (5)
2009年11月 (2)
相册
Ryan
收藏夹
(7)
JAVA(7)
最新随笔
1. 集成FCKeditor 3.5.3
2. android自适应屏幕方向和大小
3. Android游戏开发之旅(二十) 双按事件捕获
4. Android游戏开发之旅(十八) SoundPool类
5. Android游戏开发之旅(十九) 分辨率大全
6. Android游戏开发之旅(十七) 图像渐变特效
7. Android游戏开发之旅(十六) 异步音乐播放
8. Android游戏开发之旅(十四) 游戏开发实战一
9. Android游戏开发之旅(十五) 按键中断处理
10. Android游戏开发之旅(十二)Sensor重力感应(2)
搜索
最新评论
1. re: struts2 checkboxlist标签的使用
同居同意同意
--yuk
2. re: struts2 checkboxlist标签的使用
ss
--d
3. re: JavaMail(4)--使用POP3接收邮件
邮件信息可以打印出来,可是下载邮件会出错是什么原因?
--琳喵喵0721
4. re: JavaMail(4)--使用POP3接收邮件
评论内容较长,点击标题查看
--流风
5. re: 操作PDF文件
评论内容较长,点击标题查看
--ly.wolf
阅读排行榜
1. struts2 checkboxlist标签的使用(18223)
2. struts2异常拦截器(5857)
3. struts2迭代标签(3845)
4. 用freemind 秒杀Spring Security(1914)
5. 加载顺序会影响对spring bean 的调用。(1489)
网络编程>>基本的Socket编程
Posted on 2009-12-12 16:04
啥都写点
阅读(221)
评论(0)
编辑
收藏
所属分类:
J2SE
Socket 服务器端需要在某个端口上开启服务端类型的Socket,即java.net.ServerSocket.通过它的accept方法等待并接收客户端的请求,返回的是一个java.net.Socket对象,如果一直没有客户端请求,那么accept方法将会一直等待。
Socket 客户端根据服务器端的IP地址和端口号创建一个Socket对象,连接服务器。
服务器端和客户端都持有一个Socket对象,服务器端的Socket从服务器端指向客户端,而客户端的Socket从客户端指向服务器端,就像在服务器和客户端建立了两条单向的管道
Socket 类提供的getOutputStream方法获得Socket的输出流,getInputStream方法获得Socket的输入流。
/** */
/**
---------------------------SimpleServer.java-------------------------------
*/
/** */
/**
* 一个简单的socket服务器,能接受客户端请求,并将请求返回给客户端
*/
public
class
SimpleServer
{
//
服务端侦听的Socket
ServerSocket serverSkt
=
null
;
//
客户端
Socket clientSkt
=
null
;
//
客户端输入流
BufferedReader in
=
null
;
//
客户端输出流
PrintStream out
=
null
;
//
构造方法
public
SimpleServer(
int
port)
{
System.out.println(
"
服务器代理正在监听,端口:
"
+
port);
try
{
//
创建监听socket
serverSkt
=
new
ServerSocket(port);
}
catch
(IOException e)
{
System.out.println(
"
监听端口
"
+
port
+
"
失败
"
);
}
try
{
//
接收连接请求
clientSkt
=
serverSkt.accept();
}
catch
(IOException e)
{
System.out.println(
"
连接失败
"
);
}
try
{
//
获得输出输出流
in
=
new
BufferedReader(
new
InputStreamReader(clientSkt
.getInputStream()));
out
=
new
PrintStream(clientSkt.getOutputStream());
}
catch
(IOException e)
{
}
}
//
收到客户端请求
public
String getRequest()
{
String frmClt
=
null
;
try
{
//
从客户端的输入流中读取一行数据
frmClt
=
in.readLine();
System.out.println(
"
Server 收到请求:
"
+
frmClt);
}
catch
(Exception e)
{
System.out.println(
"
无法读取端口
..
"
);
System.exit(
0
);
}
return
frmClt;
}
//
发送响应给客户端
public
void
sendResponse(String response)
{
try
{
//
往客户端输出流中写数据
out.println(response);
System.out.println(
"
Server 响应请求:
"
+
response);
}
catch
(Exception e)
{
System.out.println(
"
写端口失败
"
);
System.exit(
0
);
}
}
public
static
void
main(String[] args)
throws
IOException
{
//
启动服务器
SimpleServer sa
=
new
SimpleServer(
8888
);
while
(
true
)
{
//
读取客户端的输入并返回给客户端。
sa.sendResponse(sa.getRequest());
}
}
}
/** */
/**
--------------------------SimpleClient.java--------------------------
*/
/** */
/**
* 一个简单的socket客户端,能够往服务器发送socket请求。
*/
public
class
SimpleClient
{
//
客户端输入输出流
PrintStream out;
BufferedReader in;
//
构造方法
public
SimpleClient(String serverName,
int
port)
{
try
{
//
根据服务器名和端口号,连接服务器
Socket clientSocket
=
new
Socket(serverName, port);
//
获取socket的输入输出流
out
=
new
PrintStream(clientSocket.getOutputStream());
in
=
new
BufferedReader(
new
InputStreamReader(clientSocket
.getInputStream()));
}
catch
(Exception e)
{
System.out.println(
"
无法连接服务器!
"
);
}
}
//
发送请求
public
void
sendRequest(String request)
{
//
向socket的输出流写数据
out.println(request);
System.out.println(
"
Client 发送请求:
"
+
request);
}
public
String getResponse()
{
String str
=
new
String();
try
{
//
从socket的输入流中读取数据
str
=
in.readLine();
System.out.println(
"
Client收到Server返回:
"
+
str);
}
catch
(IOException e)
{
}
return
str;
}
}
/** */
/**
-----------------------------ClientFrame.java---------------------------------------
*/
/** */
/**
* 客户端的图形界面
*/
public
class
ClientFrame
extends
JFrame
implements
ActionListener
{
//
"发送"按钮
JButton sendButton;
//
发送内容的输入框
JTextField inputField;
//
服务器返回内容的文本域
JTextArea outputArea;
//
客户端socket对象
SimpleClient client;
//
在构造函数中完成图形界面的初始化
public
ClientFrame()
{
JLabel label1
=
new
JLabel(
"
输入:
"
);
inputField
=
new
JTextField(
20
);
JPanel panel1
=
new
JPanel();
panel1.add(label1);
panel1.add(inputField);
JLabel label2
=
new
JLabel(
"
服务器返回:
"
);
outputArea
=
new
JTextArea(
6
,
20
);
JScrollPane crollPane
=
new
JScrollPane(outputArea);
JPanel panel2
=
new
JPanel();
panel2.setLayout(
new
BorderLayout());
panel2.add(label2, BorderLayout.NORTH);
panel2.add(crollPane, BorderLayout.CENTER);
sendButton
=
new
JButton(
"
发 送
"
);
sendButton.addActionListener(
this
);
JPanel panel
=
new
JPanel();
panel.setLayout(
new
BorderLayout());
panel.add(panel1, BorderLayout.NORTH);
panel.add(sendButton, BorderLayout.CENTER);
panel.add(panel2, BorderLayout.PAGE_END);
setTitle(
"
Socket 客户端
"
);
this
.getContentPane().add(panel);
this
.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public
void
actionPerformed(ActionEvent ae)
{
//
判断事件源控件是否是"发送"按钮
if
(ae.getSource()
==
sendButton)
{
try
{
//
发送文本框中的文本
client.sendRequest(inputField.getText());
}
catch
(Exception ex)
{
ex.printStackTrace();
}
//
接收服务器回应并写入文本域
outputArea.append(client.getResponse()
+
"
\n
"
);
}
}
public
static
void
main(String[] args)
{
ClientFrame frame
=
new
ClientFrame();
frame.pack();
//
连接服务器
frame.client
=
new
SimpleClient(
"
127.0.0.1
"
,
8888
);
frame.setVisible(
true
);
}
}
--
学海无涯
Powered by:
BlogJava
Copyright © 啥都写点