TextInputx="10"y="297"width="605"id="loveInput"/>
38.Buttonx="648"y="297"label="发送情书"id="sendBtn"click="sendMessage(loveInput.text)"/>
39.
Application>
复制代码
嘎嘎,情书的做法就上面那面简单,注释已经写得很清楚了,就不多说了。
OK,客户端GG的情书倒是送出去了,我们就来看看服务端MM是怎么接受这封情书的呢?
==========================================
==服务端代码:
Jserver2.java
==========================================
1.import.*;
2.importjava.io.*;
3.publicclassJserver2{
4.privateBufferedReaderreader; //负责输入
5.privateServerSocketserver; //服务器套接字
6.privateSocketsocket; //套接字
7.publicServer2(){} //缺省构造函数
8.voidstartServer() //启动服务器
9.{
10.try
11.{
12.server=newServerSocket(719); //创建服务器套接字
13.System.out.println("服务器套接字建立完毕");
14.while(true)
15.{
16. System.out.println("等待客户端GG");
17. socket=server.accept(); //若客户端GG提出连接请求,与socket连接
18. System.out.println("完成与客户端的连接");
19.reader=newBufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));//获取socket输入流,“utf-8”这个编码设置是为了更好显示中文
20.getMessage();//读取来自客户端的数据,并输出至画面上
21.}
22.}catch(Exceptione)
23.{
24.System.out.println(e);
25.}finally{
26.try
27.{
28.if(server!
=null)server.close();//关闭服务器套接字。
29.}catch(IOExceptionie){}
30.}
31.}
32.voidgetMessage() //读取来自套接字的信息
33.{
34.try
35.{
36.while(true) //循环
37.{
38.System.out.println("客户端GG说:
"+reader.readLine());
39.}
40.}catch(Exceptione){}
41.finally{
42.System.out.println("客户端中断连接");
43.try
44.{
45.if(reader!
=null)reader.close(); //关闭套接字的输入流
46.if(socket!
=null)socket.close(); //关闭套接字
47.reader=null;
48.socket=null;
49.}catch(Exceptione){}
50.}
51.}
52.publicstaticvoidmain(String[]args)
53.{
54.Server2server=newServer2();
55.server.startServer();
56.}
57.
58.}
复制代码
哈哈,我们运行来看看,我们的客户端GG的情书能否顺利到达服务端MM的手中呢?
运行结果如下:
HOHO看样子我们的客户端GG的情书,服务端MM是顺利接受到啦。
四、服务端MM的心思(多客户端通信)
在服务端MM收到客户端GG的情书以后,突然发现自己原来还是蛮受欢迎的呢。
但是有句俗话说的好,那就是“不能为了一棵树放弃一片森林”。
所以服务端MM就想,能不能多接受几个客户端GG的情书呢?
(真TMD贱。
。
。
)
OK,既然服务端MM有了这个需求(虽然是很贱的需求),那我们就要来满足她!
来看服务端的代码:
=========================================
==Jserver3.java
=========================================
1.import.*;
2.importjava.io.*;
3.importjava.util.*;
4.
5.publicclassJserver3{
6.privateServerSocketserver;
7.ListsManager=newArrayList();
8.
9.publicJserver3(){}
10.voidstartServer() //运行服务器
11.{
12.try
{
13.server=newServerSocket(719);
14.System.out.println("服务器套接字已创建成功!
");
15.while(true)
16.{
17.Socketsocket=server.accept();
18.System.out.println("已经与客户端连接");
19.newJ_Thread(socket).start();
20.sManager.add(socket);
21.System.out.println("当前客户端连结数:
"+sManager.size());
22.}
23.}catch(Exceptione){}finally
24.{
25.try
26.{
27.server.close();
28.}catch(Exceptione){}
29.}
30.}
31.publicstaticvoidmain(String[]args){
32.
33.Jserver3server=newJserver3();
34.server.startServer();
35.}
36.classJ_ThreadextendsThread //与客户端进行通信的线程类
37.{
38.Socketsocket; //套接字引用变量
39.privateDataInputStreamreader; //套接字输入流
40.privateDataOutputStreamwriter; //套接字输出流
41.J_Thread(Socketsocket) //构造函数
42.{
43.this.socket=socket;
44.}
45.publicvoidrun()
46.{
47.try
48.{
49.
50.reader=newDataInputStream(socket.getInputStream());//获取套接字的输入流
51.writer=newDataOutputStream(socket.getOutputStream());//获取套接字的输出流
52.Stringmsg;
53.while((msg=reader.readUTF())!
=null)//如果收到客户端发来的数据
54.{
55.//向客户端发送信息
56.writer.writeUTF("您的情书已经收到");
57.writer.flush();
58.System.out.println("来自客户端:
"+msg);
59.
60.}
61.}catch(Exceptione){}finally
62.{
63.try
64.{
65.sManager.remove(socket); //删除套接字
66.//关闭输入输出流及套接字
67.if(reader!
=null)reader.close();
68.if(writer!
=null)writer.close();
69.if(socket!
=null)socket.close();
70.reader=null;
71.writer=null;
72.socket=null;
73.
74.System.out.println("客户端离开");//向屏幕输出相关信息
75.System.out.println("当前客户端的连接数:
"+sManager.size());
76.}catch(Exceptione){}
77.}
78.}
79.}
80.
81.}
复制代码
嘎嘎在这段代码里,服务端MM为每一个连接的客户端GG分配一个单独的线程,而每一个线程里都持有对应的客户端GG的Socket对象。
SO,通过这些多线程,服务端MM就练就了一心N用的功力,可以同时接受N个客户端GG发来的情书了(
,真的太贱了。
。
。
。
)
客户端的代码和上面的客户端代码一模一样的,这里就不多说啦!
好了,在这里就简单的给大家介绍了如何实现java和flash(flex)实现socket通信的简单功能。
有时间的话,再给大家来个简单的聊天室实现(那个时候的服务端MM就更贱了,不仅收着N多客户端GG的情书,竟然还把情书广播给所有的客户端GG,BS!
)。
嘎嘎其实原理就是上面所说的这些,大家自己都可以尝试下。