网络编程里面最简单的一个tcp程序,把一个文件从客户端上传到服务器端,上传成功后服务器端提示上传完成。代码不多,一个服务端和一个客户端。
服务端代码:
import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class ServerDemo { public static void main(String[] args) throws IOException { // 创建服务端Socket对象 ServerSocket ss = new ServerSocket(1299); // 监听客户端tcp连接 Socket s = ss.accept(); //定义输入流以读取客户端上传文件 InputStream is = s.getInputStream(); //创建文件字节流输出对象,将读入的字节流写入文件 FileOutputStream fos = new FileOutputStream("F:\UUcall.exe"); byte[] bys = new byte[1024]; int length = 0; while ((length = is.read(bys)) != -1) { fos.write(bys, 0, length); } //禁用套接字输入流 s.shutdownInput(); //创建套接字输出流,向客户端发送消息 OutputStream os = s.getOutputStream(); //提示客户端文件上传成功 os.write("Upload successfully.".getBytes()); fos.close(); s.close(); } }
客户端代码:
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class ClientDemo { public static void main(String[] args) throws IOException{ //创建客户端Socket对象,并指定服务器地址及端口号 Socket s = new Socket("127.0.0.1",1299); //调用getOutputStream()方法产生输出流对象 OutputStream os = s.getOutputStream(); //创建本地文件字节流对象,模拟文件上传操作 FileInputStream fis = new FileInputStream(new File("D:\UUcall.exe")); //定义字节数组,每读取2048字节写一次 byte[] bys = new byte[2048]; //记录每次实际读取长度 int length = 0; while ((length = fis.read(bys))!=-1) { os.write(bys,0,length); } //禁用Socket对象的输出流 s.shutdownOutput(); //获取Socket对象的输入流以读取服务器回送消息 InputStream is = s.getInputStream(); byte[] msg = new byte[1024]; int len = is.read(msg); String string = new String(msg,0,len); System.out.println(string); //关闭文件字节流对象 fis.close(); //关闭此套接字对象 s.close(); } }