多个客户端与一个服务器端通信的问题
来源:互联网 发布:apache 2.2 漏洞 编辑:程序博客网 时间:2024/06/06 09:08
多个客户端与一个服务器端通信的问题
上篇博文主要是讲的关于客户端与服务器端的通信问题,在上篇博文中当我们只有一个客户端访问我们的服务器时是可以正常运行的,但是当我们有多个客户端访问我们的服务器时,我们的代码就不能正常工作了。
而在现实中,我们是很少有一个服务器只供一个客户端访问的,此篇博文就是来解决多个客户端访问我们服务器端的问题。
解决方法:
- 用一个多线程就可以解决
实现代码如下:
第一个:客户端的代码如下:
package org.wrh.socketserver;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class MyClient { public static void main(String[] args) throws Exception { //第一步:创建客户端Socket Socket s=new Socket("192.168.1.107",4567); //第二步:读取向服务器端发送的数据文件 FileInputStream fis=new FileInputStream("d:\\100.txt"); //第三步:获取Socket输出流 OutputStream os=s.getOutputStream(); byte[] buf=new byte[1024]; int len; while((len=fis.read(buf))!=-1){ os.write(buf, 0, len); } //刷新一下缓冲区的数据 os.flush(); //告诉服务器,我的数据已经发送完了 s.shutdownOutput(); //将服务器返回的数据读取出来 InputStream is=s.getInputStream(); byte[] buf_in=new byte[1024]; int len_in=is.read(buf_in); System.out.println(new String(buf_in,0,len_in)); fis.close(); os.close(); is.close(); s.close(); }}
第二个:服务器端的代码如下
package org.wrh.socketserver;import java.net.ServerSocket;import java.net.Socket;public class MyServer { public static void main(String[] args) throws Exception { //第一步:建立服务器端Socket ServerSocket ss=new ServerSocket(4567); while(true){ //第二步:获取客户端 Socket socket=ss.accept(); /* * 当我们考虑多个客户端访问服务器端的时候,我们就需要考虑多线程的问题 * */ new Thread(new TaskWork(socket)).start(); } }}
其中,线程类的代码如下
package org.wrh.socketserver;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class TaskWork implements Runnable { Socket socket; public TaskWork(Socket socket){ this.socket=socket; } @Override public void run() { // TODO Auto-generated method stub int count=0; /* * 获取客户端的ip地址 * */ String ip=socket.getInetAddress().getHostAddress(); System.out.println(ip+"....connected"); //第三步:获取Socket的输入流,对客户端发送来的数据进行读取 try{ InputStream is=socket.getInputStream(); /* *读取数据,并 将数据写入到文件中 * */ File dir=new File("d:\\wu"); if(!dir.exists()){ dir.mkdirs(); } File file=new File(dir,ip+".txt"); /* * 如果在服务器端此文件已经存在的处理办法 * */ if(file.exists()){ file=new File(dir,ip+"("+(++count)+").txt"); } FileOutputStream fos=new FileOutputStream(file); byte[] buf=new byte[1024]; int len=0; while((len=is.read(buf))!=-1){ fos.write(buf, 0, len); } fos.flush(); //给客户端一个反馈信息 OutputStream os=socket.getOutputStream(); os.write("收到数据".getBytes()); //下面为关闭各种要关闭的资源 fos.close(); is.close(); os.close(); socket.close(); } catch(Exception e){ e.printStackTrace(); } }}
如果上篇博文的代码你弄懂了,这篇博文的代码理解起来就相当容易啦
说明
- 上面的代码中,主线程一直在等待这客户端的连接,只要一有客户端连接进来,就会开启一个子线程来执行相应的操作。
2 0
- 多个客户端与一个服务器端通信的问题
- C++ Socket网络通信实现一个服务器端和多个客户端的通信
- 使用fifo实现一个服务器端多个客户端通信
- C#一个服务器端多个客户端Socket通信
- 客户端与服务器端的通信
- 客户端与服务器端的通信
- 客户端与服务器端通信
- 用socketchannel实现多客户端与服务器端的通信
- java多线程实现服务器端与多客户端之间的通信
- js 客户端与服务器端的通信
- js 客户端与服务器端的通信
- android客户端与c#服务器端的通信
- python客户端与服务器端的通信
- C#服务器端与客户端的通信(服务器端)
- C#基于TCP&UDP实现服务器与多个客户端之间的通信(客户端之间直接通信,不靠服务器端转发消息)
- 一个多播例子的服务器端与客户端
- 解决workshop开发的服务器端与axis开发的客户端之间的交互通信问题
- java Socket 一个服务器与多个客户端进行通信
- 大白话解析模拟退火算法
- 直接插入排序(Insertion Sort):
- 在Cisco IOS路由器上验证NAT-T的使用
- 【Unity快速实现小功能】加载文本文件之——加载JSON格式文本文件
- 使用Socks5代理下载Android源码
- 多个客户端与一个服务器端通信的问题
- codecolor代码高亮插件下载
- Java本地文件操作-新建、删除、重命名、属性
- 【分享】极客学院视频教程下载
- Linux目录结构
- c语言方块排列游戏
- 巩固基础-类似tab的翻页效果,上一页下一页
- vbcrlf相关 及其 回车与换行的区别
- iOS证书--生产证书(Production)的申请