java编程socket套接字网络编程Word格式.docx
- 文档编号:3705246
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:15
- 大小:18.94KB
java编程socket套接字网络编程Word格式.docx
《java编程socket套接字网络编程Word格式.docx》由会员分享,可在线阅读,更多相关《java编程socket套接字网络编程Word格式.docx(15页珍藏版)》请在冰点文库上搜索。
8
*服务器断的工作就是在指定的端口上监听
9
*<
li>
建立连接<
/li>
10
打开输出流<
11
封装输出流<
12
向客户端发送数据<
13
关闭打开的输出流<
14
关闭打开的socket对象<
15
*
16
*@authorHongten
17
18
*@time2012-4-29
2012
19
*/
20publicclassTestServer{
21
publicstaticvoidmain(Stringargs[]){
22
try{
23
//指定服务器端的端口号为8888
24
ServerSockets=newServerSocket(8888);
25
while(true){
26
//建立连接
27
Socketsocket=s.accept();
28
//打开输出流
29
OutputStreamos=socket.getOutputStream();
30
//封装输出流
31
DataOutputStreamdos=newDataOutputStream(os);
32
//s<
.getInetAddress()获取远程ip地址,s<
.getPort()远程客户端的断后好
33
//向客户端发送数据
34
dos.writeUTF("
你好,客户端地址信息:
"
+socket.getInetAddress()
35
+"
\t客户端通信端口号:
+socket.getPort());
36
i'
maserver,mynameishongten!
"
);
37
//关闭打开的输出流
38
dos.close();
39
//关闭打开的socket对象
40
socket.close();
41
}//开始下一此循环
42
}catch(IOExceptione){
43
e.printStackTrace();
44
}
45
46}
客户端代码:
5
6/**
7
*客户端
*@time2012-4-292012
12publicclassTestClient{
//创建socket对象,指定服务器的ip地址,和服务器监听的端口号
//客户端在new的时候,就发出了连接请求,服务器端就会进行处理,如果服务器端没有开启服务,那么
//这时候就会找不到服务器,并同时抛出异常==》.ConnectException:
Connection
//refused:
connect
Sockets1=newSocket("
127.0.0.1"
8888);
20
//打开输入流
InputStreamis=s1.getInputStream();
//封装输入流
DataInputStreamdis=newDataInputStream(is);
//打印服务器端发送过来的信息
System.out.println(dis.readUTF());
//关闭输入流
dis.close();
s1.close();
35}
如果服务器端没有打开,这时候运行客户端,出现的结果:
1.ConnectException:
Connectionrefused:
2
at.PlainSocketImpl.socketConnect(NativeMethod)
3
at.PlainSocketImpl.doConnect(PlainSocketImpl.java:
333)
4
at.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:
195)
5
at.PlainSocketImpl.connect(PlainSocketImpl.java:
182)
6
at.SocksSocketImpl.connect(SocksSocketImpl.java:
366)
at.Socket.connect(Socket.java:
518)
468)
at.Socket.<
init>
(Socket.java:
365)
179)
atcom.b510.socket1703.TestClient.main(TestClient.java:
19)
如果服务器端先打开服务,这时候客户端连接服务器端,出现的效果:
1你好,客户端地址信息:
/127.0.0.1
客户端通信端口号:
2800
2i'
2.实现单线程的聊天室
1packagecom.b510.socket1704.simplechatroom;
6import.SocketException;
7
8/**
*服务器端程序,在while循环中所执行的动作是:
*听,说,听,说,听,说...
16publicclassTestServer{
//创建一个socket对象
//socket对象调用accept方法,等待连接请求
Sockets1=s.accept();
//打开输出流
OutputStreamos=s1.getOutputStream();
//封装输出流
//打开输入流
//封装输入流
//读取键盘输入流
InputStreamReaderisr=newInputStreamReader(System.in);
//封装键盘输入流
BufferedReaderbr=newBufferedReader(isr);
35
Stringinfo;
//接受客户端发送过来的信息
info=dis.readUTF();
//打印接受的信息
System.out.println("
对方说:
+info);
//如果发现接受的信息为:
bye,那么就结束对话
if(info.equals("
bye"
))
break;
//读取键盘的输入流
46
info=br.readLine();
47
//写入到网络连接的另一边,即客户端
48
dos.writeUTF(info);
49
//如果服务器自己说:
bye,也是结束对话
50
51
52
53
//关闭输入流
54
55
//关闭输出流
56
57
//关闭socket对象
58
59
s.close();
60
}catch(SocketExceptione){
61
网络连接异常,程序退出!
62
63
64
65
66}
5import.SocketException;
*客户端程序,在while循环中所执行的动作是:
*说,听,说,听,说,听....
13publicclassTestClient{
localhost"
33
//客户端先读取键盘输入信息
//把他写入到服务器方
//如果客户端自己说:
bye,即结束对话
//接受服务器端信息
//打印
//关闭相应的输入流,输出流,socket对象
58}
运行效果:
服务器端效果>
>
1对方说:
hell
2你好
3对方说:
嘿嘿
4你今天
5对方说:
13
6代售点
客户端端效果>
1hell
2对方说:
你好
3嘿嘿
4对方说:
你今�?
513
6对方说:
代售�?
当前的程序不管是服务器端,还是客户端,都是单线程的。
如:
服务器端说:
你好"
1//读取键盘的输入流
2info=br.readLine();
3//写入到网络连接的另一边,即客户端
4dos.writeUTF(info);
5//如果服务器自己说:
通过上面的代码,把"
发送出去了,这时候,程序又开始循环,运行到:
1//接受客户端发送过来的信息
2info=dis.readUTF();
这段代码,其实在这里就阻塞在这里了。
要等到客户端那边说了话,"
嘿嘿"
,这时候这里的
阻塞才会变为非阻塞状态,然后又继续说,说完后又继续阻塞......
而对于客户端来说,其实是一样的道理,客户端说完"
hello"
后,进入:
1//接受服务器端信息
到收听服务器端的信息,在这里也产生了阻塞,只有服务器端说了"
,这个阻塞才变为非阻塞
状态。
然后又继续接下来的动作....
3.实现多线程的聊天室
1packagecom.b510.socket1705.freeechatroom;
4import.*;
*服务器端程序
13publicclassTestServer{
//创建一个socket对象
//socket对象调用accept方法,等待连接请求
20
//=========服务器端,在这里应该先打开输出流,在打开输入流,
//=========因为服务器端执行的操作是先听,再说,听,说,听,说.....
23
DataInputStreamdis=newDataInputStrea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 编程 socket 套接 网络