




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1. 使用Socket进行通讯使用Socket对象,构造函数指明对方的 ip地址和端口号调用 accept进入阻塞状态,等待通讯请求用getOutputStream获取输出流,通过它发送数据用 getInputStream获取输入流,通过它接收数据1. 使用Socket进行通讯PC端的Server:public class SimpleServer public static void main(String args) throws IOException /创建一个ServerSocket,用于监听客户端Socket的连接请求ServerSocket ss = new ServerSock
2、et(30000);/采用循环不断接受来自客户端的请求while (true) /每当接受到客户端Socket的请求,服务器端也对应产生一个SocketSocket s = ss.accept();OutputStream os = s.getOutputStream();os.write(您好,您收到了服务器的新年祝福!n.getBytes(utf-8);/关闭输出流,关闭Socketos.close(); s.close();手机端的Clientpublic class SimpleClient extends ActivityEditText show;Overridepublic vo
3、id onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);show = (EditText) findViewById(R.id.show);/关闭输入流、sockettrySocket socket = new Socket(192.168.1.88 , 30000);/将Socket对应的输入流包装成BufferedReaderBufferedReader br = new BufferedReader(new InputStreamReade
4、r(socket.getInputStream();/进行普通IO操作String line = br.readLine();show.setText(来自服务器的数据: + line);br.close();socket.close();catch (IOException e)e.printStackTrace();2. 多线程的网络通讯(P483,MultiThreadServer)BufferedReader的readline在成功返回之前,服务器进程无法继续,不能再响应别的请求。因此,服务器应该为每个请求都单独创建一个线程来响应请求。客户端读取服务器数据,也应该单独起一个线程。否则在
5、读取的过程中,客户端就无法响应用户操作多线程的服务器端:public class MyServer /定义保存所有Socket的ArrayListpublic static ArrayList socketList = new ArrayList(); public static void main(String args) throws IOException ServerSocket ss = new ServerSocket(30000);while(true)/此行代码会阻塞,将一直等待别人的连接Socket s = ss.accept();socketList.add(s);/每当客
6、户端连接后启动一条ServerThread线程为该客户端服务new Thread(new ServerThread(s).start(); 多线程的服务器端:public class ServerThread implements Runnable /定义当前线程所处理的SocketSocket s = null;/该线程所处理的Socket所对应的输入流BufferedReader br = null;public ServerThread(Socket s)throws IOExceptionthis.s = s;/初始化该Socket对应的输入流br = new BufferedRead
7、er(new InputStreamReader(s.getInputStream() , utf-8); /public void run()tryString content = null;/采用循环不断从Socket中读取客户端发送过来的数据while (content = readFromClient() != null)/遍历socketList中的每个Socket,/将读到的内容向每个Socket发送一次for (Socket s : MyServer.socketList)OutputStream os = s.getOutputStream(); os.write(conten
8、t + n).getBytes(utf-8);catch (IOException e) e.printStackTrace();/定义读取客户端数据的方法private String readFromClient() tryreturn br.readLine();/如果捕捉到异常,表明该Socket对应的客户端已经关闭catch (IOException e)/删除该Socket。MyServer.socketList.remove(s); /return null;多线程的客户端:public class MultiThreadClient extends Activity/ 定义界面上
9、的两个文本框EditText input, show;/ 定义界面上的一个按钮Button send;OutputStream os;Handler handler;Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);input = (EditText) findViewById(R.id.input);send = (Button) findViewById(R.id.send);show = (EditT
10、ext) findViewById(R.id.show);Socket s;handler = new Handler()Overridepublic void handleMessage(Message msg)/ 如果消息来自于子线程if (msg.what = 0 x123)/ 将读取的内容追加显示在文本框中show.append(n + msg.obj.toString();trys = new Socket(192.168.1.88, 30000);/ 客户端启动ClientThread线程不断读取来自服务器的数据new Thread(new ClientThread(s, hand
11、ler).start(); / os = s.getOutputStream();catch (Exception e)e.printStackTrace();send.setOnClickListener(new OnClickListener()Overridepublic void onClick(View v)try/ 将用户在文本框内输入的内容写入网络os.write(input.getText().toString() + rn).getBytes(utf-8);/ 清空input文本框input.setText();catch (Exception e)e.printStackT
12、race(););public class ClientThread implements Runnable/该线程负责处理的Socketprivate Socket s;private Handler handler;/该线程所处理的Socket所对应的输入流BufferedReader br = null;public ClientThread(Socket s , Handler handler)throws IOExceptionthis.s = s;this.handler = handler;br = new BufferedReader(new InputStreamReader(s.getInputStream();public void run() try String content = null;/不断读取Socket输入流中的内容。while
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 世界著名科学家的生平读后感
- 知识经济下的版权法律制度与实施效果研究
- 垃圾桶买卖合同
- 2025年电网系统电力电缆项目发展计划
- 项目收尾阶段工作总结与经验教训记录
- 大头儿子小头爸爸家庭趣事读后感
- 大学生科技创新征文
- 短视频平台上的品牌传播与受众忠诚度研究
- 美术馆展览协议
- 电影特效制作流程在企业宣传中的应用
- 树立正确“三观”班会课件
- 会务礼仪服务流程
- 《青少年礼仪培训》课件
- 老年护理学英语课件
- 泌尿外科膀胱癌一病一品优质护理汇报课件
- 卷烟制造工艺学课件-第八章-制丝工艺
- 小学二年级有余数的除法口算题汇总(共300题)
- WTE朗文英语 1B 单词卡片
- 网咖成本预算明细表
- 译林版四年级下册第一单元课件
- 化工制图CAD教程-工艺流程图课件
评论
0/150
提交评论