要进行网络编程,首先要搞清楚目的是什么。java
网络编程说简单点就是在网络上的计算机进行数据的交互。编程
既然要进行数据交互,那就须要有一个发送方和一个接受方。缓存
固然,现阶段网上的电脑通常来讲都是既接受数据,也能发送数据的,因此说这些电脑都是“插座型”的,进可攻,退可受!!!网络
好吧,仍是使用专业点的名字吧:客户端/服务器。socket
那么具体到两台电脑,它们是如何来交互数据的呢?请看下图:spa
从步骤来分析:code
1、服务器端程序对象
1.1建立一个服务器套接字(ServerSocket),并绑定到指定端口。blog
1.2侦听来自客户端的请求,若是接受到链接则返回套接字对象(socket)。
1.3得到输入/输出流,也就是进行数据的接收或发送。
1.4关闭套接字(socket)。
2、客户端程序
2.1建立一个套接字,向服务器指定商品发送请求。
2.2与服务器正确链接后开始数据的接收或发送。
2.3关闭套接字。
步骤分析完了,接下来就是实施了。
服务器端代码以下:
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
31
32
33
|
public
class
MyServer {
private
static
final
int
SERVER_PORT =
9527
;
// 指定侦听端口
public
MyServer() {
try
{
ServerSocket ss =
new
ServerSocket(SERVER_PORT);
// 建立服务器套接字
System.out.println(
"服务端已启动,正在等待客户端..."
);
Socket s = ss.accept();
// 侦听来自客户端的请求
InputStream in = s.getInputStream();
// 得到输入流,用来接收数据
OutputStream out = s.getOutputStream();
// 得到输出流,用来发送数据
byte
[] buf =
new
byte
[
1024
];
// 数据缓存
int
len = in.read(buf);
// 从输入流中读取数据
String strFromClient =
new
String(buf,
0
, len);
System.out.print(
"来自客户端的信息>>"
);
System.out.println(strFromClient);
String strToClient =
"我也很好!"
;
out.write(strToClient.getBytes());
// 往输出流中发送数据
// 关闭输入流和输出流
in.close();
out.close();
// 关闭通讯套接字和服务器套接字
s.close();
ss.close();
System.out.println(
"服务端已关闭。"
);
}
catch
(IOException e) {
e.printStackTrace();
}
}
public
static
void
main(String[] args) {
MyServer ms =
new
MyServer();
}
}
|
客户端代码以下:
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
31
|
public
class
MyClient {
private
static
final
int
SERVER_PORT =
9527
;
//服务器的侦听端口
public
MyClient() {
try
{
//因为服务端也是运行在本机,因此建立本机的InetAddress对象
InetAddress address = InetAddress.getByName(
"localhost"
);
Socket s =
new
Socket(address, SERVER_PORT);
//向服务器侦听端口发出请求
System.out.println(
"客户端已启动。"
);
InputStream in = s.getInputStream();
//得到输入流,用来接收数据
OutputStream out = s.getOutputStream();
//得到输出流,用来发送数据
String strToServer =
"你好!"
;
out.write(strToServer.getBytes());
//往输出流中发送数据
byte
[] buf =
new
byte
[
1024
];
int
len = in.read(buf);
//从输入流中读取数据
String strFromServer =
new
String(buf,
0
, len);
System.out.print(
"来自服务端的回答>>"
);
System.out.println(strFromServer);
in.close();out.close();
//关闭输入流和输出流
s.close();
//关闭通讯套接字
System.out.println(
"客户端已关闭。"
);
}
catch
(UnknownHostException nhe) {
System.out.println(
"未找到指定主机..."
);
}
catch
(IOException ioe) {
ioe.printStackTrace();
}
}
public
static
void
main(String[] args) {
MyClient mc =
new
MyClient();
}
}
|
先运行服务器端
再运行客户端,能够发现服务器端的内容发生了变化
再切换到客户端的输出窗口
客户端的输出内容以下:
有兴趣的看官能够修改代码,让它变成能够从控制台反复输入文字来交互。研究得更深些的朋友,能够尝试发送文件。