本帖最后由 徐小骥 于 2012-8-15 17:14 编辑
- import java.io.*;
- import java.net.*;
- public class tcpserver {
- public static void main(String[] args) throws Exception {
- ServerSocket ss=new ServerSocket(10010);//创建绑定到特定端口的服务器套接字。
- while(true){//循环接受连接
- Socket s=ss.accept();//侦听并接受到此套接字的连接。
- new Thread(new picthread(s)).start();//启动线程实现多连接
- }
- }
-
- }
- class picthread implements Runnable{
- private Socket st;
- picthread(Socket st){
- this.st=st;
- }
- public void run() {
- String ip=st.getInetAddress().getHostName();//获得连接主机的ip
- int num=1;//文件,名变量
- try {
- InputStream in=st.getInputStream();//获得套接字的输入流
- File f=new File(ip+"("+num+")"+".jpg");//创建源文件对象
- while(f.exists()){//判断是否存在
- f=new File(ip+"("+(num++)+")"+".jpg");//自定义的文件命名规则
- }
- FileOutputStream fos=new FileOutputStream(f);//打开文件输出流,并指定了源文件的文件名和路径
- byte[] by=new byte[1024];
- int len=0;
- while((len=in.read(by))!=-1){
- fos.write(by, 0, len);//将数据写入文件
- }
- //System.out.print("!!!!"+ip);//程序运行到此处发生了阻塞,未打印
- OutputStream out=st.getOutputStream();//获取套接字的输出流
- out.write("上传成功".getBytes());//给连接主机反馈内容
- fos.close();//关闭IO流
- st.close();//关闭Socket流
- } catch (IOException e) {
- throw new RuntimeException(ip+"上传失败");
- }
- }
- }
复制代码- import java.io.*;
- import java.net.*;
- public class tcpclient{
- public static void main(String[] args) throws Exception {
- Socket st= new Socket("127.0.0.1",10010);// 创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
- FileInputStream fim=new FileInputStream("f:\\01.jpg");//打开文件输入流并指定源文件
- OutputStream out=st.getOutputStream();//得到套接字的输出流
- byte[] bt=new byte[1024];
- int len=0;
- while((len=fim.read(bt))!=-1){
- out.write(bt, 0, len);//将源文件数据按指定大小传给输出流
- }
- InputStream in=st.getInputStream();//得到套接字的输入流
- byte[] bti=new byte[1024];
- int num=in.read(bti);//获得输入流发送的数据长度
- //程序运行到此处发生了阻塞,未打印
- System.out.print("通过运行");//未打印
- System.out.println(new String(bti,0,num));//打印输入流数据
- fim.close();//关闭IO流
- st.close();//关闭Socket流
- }
- }
复制代码 代码如上,客户端运行到socket的接受流、服务端运行到socket的输入流都没有运行了,文件上传能成功,但是客户端在调用in.read()方法时发生了阻塞?而服务器在获取套接字的输出流之前发生了阻塞?两个控制台都没有反应,后面的代码都没有运行了,需要修改什么地方才能实现多个客户端向服务器上传图片?为什么它们没有运行了?
|