JAVA网络编程
来源:互联网 发布:python os fork exec 编辑:程序博客网 时间:2024/05/16 17:10
本讲内容: socket 只会装傻的”智能“机器人
套接字(socket)是代表计算机之间网络连接的对象。要进行计算机间的网络通讯,建立TCP连接,那么就需要Socket编程,Java提供了ServerSocket类和Socket类,可以利用他们很方便的实现,计算机间的网络通讯。
因为Java把数据的传输已经抽象成InputStream和OutputStream的输入输出流,那么对网络通讯来说,其实就是利用ServerSocket类和Socket类建立起来网络连接,进行字节流或者字符流的输入输出操作。
下面我们还是通过一个例子来学习Socket编程:只会装傻的”智能“机器人
直接上代码,服务器端 TalkServer.java :
01
import
java.io.BufferedReader;
02
import
java.io.IOException;
03
import
java.io.InputStreamReader;
04
import
java.io.PrintWriter;
05
import
java.net.ServerSocket;
06
import
java.net.Socket;
07
08
public
class
TalkServer {
09
10
public
static
void
main(String[] args)
throws
IOException {
11
12
// 创建一个ServerSocket
13
ServerSocket server =
new
ServerSocket(
8080
);
14
15
// 准备接受客户连接,如果有客户连接到,则创建一个socket对象,如果没有客户连接到,那么该程序会停在本行一直等待,像是在睡眠或者假死,这种行为叫做“阻塞”,阻塞是网络通信中的术语,就是你等别人响应,如果必须等到,等不到就一直等,就是阻塞,等不到也继续向前走的当然就是非阻塞。
16
Socket socket = server.accept();
17
18
// 从socket中获取一个输入对象,以便接受从网络上来的数据
19
BufferedReader socketInput =
new
BufferedReader(
new
InputStreamReader(socket.getInputStream()));
20
21
// 从标准输入中获取一个输入对象,以便接受从键盘上传来的数据,如果想让服务器端和客户端自由对话的话可以用此对象
22
//BufferedReader keyboardInput = new BufferedReader(new InputStreamReader(System.in));
23
24
// 从socket中获取一个
25
PrintWriter socketOutput =
new
PrintWriter(socket.getOutputStream(),
true
);
26
27
//定义一些变量
28
String input;
29
30
// 一直执行,直到客户端表示要断开
31
while
(
true
){
32
//从客户端获取用户输入的字符串
33
input = socketInput.readLine();
34
//发送到屏幕
35
System.out.print(
"客户:"
);
36
System.out.println(input);
37
38
//准备好回复语句
39
String reply= reply(input);
40
//发送到客户端
41
socketOutput.println(reply);
42
//发送到屏幕
43
System.out.print(
"小瑶瑶:"
);
44
System.out.println(reply);
45
46
//客户如果输入的是再见则退出循环
47
if
(input.equals(
"再见"
)){
48
break
;
49
}
50
}
51
52
//关闭释放资源
53
socketInput.close();
54
socketOutput.close();
55
socket.close();
56
57
}
58
59
//回复方法
60
private
static
String reply(String input) {
61
62
String output=replys[number%
7
];
63
64
if
(number%
7
==
5
){
65
output = output+
" "
+input;
66
}
67
68
number++;
69
return
output;
70
}
71
72
//回复方法用到的一些变量
73
static
int
number =
0
;
74
75
static
String[] replys =
new
String[
7
];
76
77
static
{
78
replys[
0
]=
"你说的啥,我听不见?"
;
79
replys[
1
]=
"声音再大点行不?"
;
80
replys[
2
]=
"声音再大点一点点行不?"
;
81
replys[
3
]=
"还是听不清……"
;
82
replys[
4
]=
"看来是网络的问题,你要不说慢点?"
;
83
replys[
5
]=
"听到了!听到了!你说的是:"
;
84
replys[
6
]=
"完了,又听不清了……"
;
85
}
86
87
}
88
客户端代码 TalkClient.java :
01
import
java.io.BufferedReader;
02
import
java.io.IOException;
03
import
java.io.InputStreamReader;
04
import
java.io.PrintWriter;
05
import
java.net.Socket;
06
import
java.net.UnknownHostException;
07
08
public
class
TalkClient {
09
10
public
static
void
main(String[] args)
throws
UnknownHostException, IOException {
11
12
Socket socket =
new
Socket(
"127.0.0.1"
,
8080
);
13
14
// 从socket中获取一个输入对象,以便接受从网络上来的数据
15
BufferedReader socketInput =
new
BufferedReader(
new
InputStreamReader(socket.getInputStream()));
16
17
// 从标准输入中获取一个输入对象,以便接受从键盘上传来的数据
18
BufferedReader keyboardInput =
new
BufferedReader(
new
InputStreamReader(System.in));
19
20
// 从socket中获取一个
21
PrintWriter socketOutput =
new
PrintWriter(socket.getOutputStream(),
true
);
22
23
// 定义一些变量
24
String input;
25
26
// 一直执行
27
while
(
true
){
28
29
//从键盘获取数据,通过socket对象发送出去
30
input = keyboardInput.readLine();
31
socketOutput.println(input);
32
33
//接收从socket中获取的服务器端发回的回应信息,并发送到屏幕上
34
input = socketInput.readLine();
35
System.out.println(input);
36
}
37
38
}
39
40
}
编译两个文件,先运行TalkServer,开始接收客户端的连接,然后运行客户端,在客户端上打字,服务器端会有回应,运行截图如下,这里上一个服务器端的截图:
- 【网络编程】JAVA网络编程
- java网络编程:网络基本概念
- Java网络编程-UDP编程
- Java 高层网络编程
- Java网络编程2
- Java网络编程3
- Java网络编程4
- Java网络服务器编程
- java网络编程1
- java网络编程2
- JAVA网络编程
- Java网络服务器编程
- java网络编程
- Java 高层网络编程
- Java 高层网络编程
- Java网络服务器编程
- Java网络编程
- JAVA网络编程
- soundtouch之变调、变速、节拍
- Android 手势 动画 ViewFlippe (1)
- hash算法设计
- 《定风波》--苏轼
- Android系统构架分析和应用程序目录结构分析
- JAVA网络编程
- How to fix Failed to load JavaHL Library in Eclipse
- 判断字符串是否可以转换为整型
- Android源代码下载指南(图解)
- VisualAssist 快捷键
- 记事本的编码问题
- Android多媒体(Media)入门
- eclipse常用配置
- android简单视频播放器