我不知道你为什么这样写代码,难道编译时没有报错吗,一个.java文件中,只能有一个类的类名前面可以加public,其余的类都不可以。
而且导入包都会放在最上面,另外就是你客户端的Socket怎么可能用服务端的Socket呢,而且还没有指定ip地址和端口号,这样的代码怎么可能上传的了图片,问题太多了,我给段代码你看一下,希望对你有所帮助。这段代码是我练习时写的
/**
* 需求:上传图片
*/
import java.io.*;
import java.net.*;
class TcpClient3 {
public static void main(String[] args) throws Exception{
Socket s = new Socket("127.0.0.1",10000);
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("e:\\ruoxi\\ruoxi.jpg"));
BufferedOutputStream bosOut = new BufferedOutputStream(s.getOutputStream());
byte[] buf = new byte[1024];
int len = 0;
while((len=bis.read(buf)) != -1){
bosOut.write(buf, 0, len);
bosOut.flush();
}
s.shutdownOutput();
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
String str = br.readLine();
System.out.println(str);
bis.close();
s.close();
}
}
/*
* 服务端:
* 这个服务端有个局限性,当A客户端连接 上以后。被服务器端获取到,服务端开始执行具体流程。
* 这时B客户端连接,只有等待
* 因为服务端还没有处理完A客户端的请求,还没有在循环回来执行下次accept方法。所以暂时获取不到B客户端对象
* 那么为了可以让多个客户端同时并发访问服务端。服务端最好就是将每个客户端封装到一个单独线程中,这样,就
* 可以同时处理多个客户端的请求。参见:TcpCopyPic2.java
*/
class TcpServer3{
public static void main(String[] args) throws Exception{
ServerSocket ss = new ServerSocket(10000);
Socket s = ss.accept();
BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
BufferedOutputStream bosOut = new BufferedOutputStream(new FileOutputStream("Copy_ruoxi.jpg"));
byte[] buf = new byte[1024];
int len = 0;
while((len = bis.read(buf)) != -1){
bosOut.write(buf,0,len);
}
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println("复制图片成功");
bosOut.close();
s.close();
ss.close();
}
}
|