多个客户端与一个服务器端通信的问题

多个客户端与一个服务器端通信的问题

上篇博文主要是讲的关于客户端与服务器端的通信问题,在上篇博文中当我们只有一个客户端访问我们的服务器时是可以正常运行的,但是当我们有多个客户端访问我们的服务器时,我们的代码就不能正常工作了。

而在现实中,我们是很少有一个服务器只供一个客户端访问的,此篇博文就是来解决多个客户端访问我们服务器端的问题。 解决方法:

用一个多线程就可以解决

实现代码如下: 第一个:客户端的代码如下:

package org.wrh.socketserver;import java.io.FileInputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;{(String[] args) throws Exception {//第一步:创建客户端SocketSocket 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;{(String[] args) throws Exception {//第一步:建立服务器端SocketServerSocket 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;{Socket socket;public TaskWork(Socket socket){this.socket=socket;}() {// TODO Auto-generated method stubint 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();}}}

如果上篇博文的代码你弄懂了,这篇博文的代码理解起来就相当容易啦

说明 上面的代码中,,主线程一直在等待这客户端的连接,只要一有客户端连接进来,就会开启一个子线程来执行相应的操作。

人生没有停靠站,自我本身永远是一个出发点。

多个客户端与一个服务器端通信的问题

相关文章:

你感兴趣的文章:

标签云: