基于JAVA socket的服务器客户端编程

来源:百度知道 编辑:UC知道 时间:2024/06/24 12:34:28
我要实现一个系统:客户端A可以上传文件给服务器,但只是上传文件名,本机IP和端口(服务器只是保存客户端文件的索引,并不保存文件本身)~客户端A还可以到服务器上查看其他客户端上传的文件。并可以到服务器搜索想要的文件(基于文件名搜索),服务器将共享该文件的客户端B的IP,端口号发给A,然后A与B连接,从B处下载该文件。请高手写写啊,急用!!
或者解决这个问题也可以给分:单击客户端不同的按钮能向服务器发送不同的消息,但是做得时候发现客户端与服务器连接后只能向服务器发送一条消息,再单击其他按钮就不好使了~想问一下用什么办法解决

要完成这个工作,需要完成三个部分的工作,以下依次说明:

一、建立服务器类

Java中有一个专门用来建立Socket服务器的类,名叫ServerSocket,可以用服务器需要使用的端口号作为参数来创建服务器对象。

ServerSocket server = new ServerSocket(9998)

这条语句创建了一个服务器对象,这个服务器使用9998号端口即在端口9998上注册服务,这里稍微要注意的是端口的分配必须是唯一的。因为端口是为了唯一标识每台计算机唯一服务的,另外端口号是从0~65535之间的,前1024个端口已经被Tcp/Ip 作为保留端口,因此你所分配的端口只能是1024个之后的。当一个客户端程序建立一个Socket连接,所连接的端口号为9998时,服务器对象server便响应这个连接,并且server.accept()方法会创建一个Socket对象。服务器端便可以利用这个Socket对象与客户进行通讯。

Socket incoming = server.accept() ; // 监听窗口,等待连接

进而得到输入流和输出流,并进行封装

BufferedReader in = new BufferedReader(new

InputStreamReader(incoming.getInputStream()));

/*

当读取文件时,先把内容读到缓存中,当调用in.readLine()时,再从缓存中以字符的方式读取数据(以下简称“缓存字节读取方式”)。

*/

PrintWriter ut = new PrintWriter(incoming.getOutputStream(),true);

随后,就可以使用in.readLine()方法得到客户端的输入,也可以使用out.println()方法向客户端发送数据。从而可以根据程序的需要对客户端的不同请求进行回应。

在所有通讯结束以后应该关闭这两个数据流,关闭的顺序是先关闭输出流,再关闭输入流