简单的TCP通信程序(二)
上次说了简单的TCP通信的代码实现,但是那是不完善的。只能进单次信息得交换,但是我们知道,一个服务器是可以和多个客户端进行通信得,所以,我们需要创建多线程。每有一个客户端发送信息服务器就会创建一个新的线程,从而实现多个客户端同时与服务器进行通信。
客户端
我们以传输一张图片为例
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| public class TCPClient { public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("E:\\text\\a.jpg"); Socket socket = new Socket("127.0.0.1",8888); OutputStream os = socket.getOutputStream(); int len = 0; byte[] bytes = new byte[1024]; while ((len = fis.read(bytes)) != -1) { os.write(bytes, 0, len); }
socket.shutdownOutput();
InputStream is = socket.getInputStream(); while ((len = is.read(bytes)) != -1) { System.out.println(new String(bytes,0,len)); } socket.close(); fis.close(); } }
|
服务器端
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| public class TCPServer { public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(8888);
while (true) { Socket socket = server.accept();
new Thread(new Runnable() {
@Override public void run() { try { InputStream is = socket.getInputStream(); File file = new File("D:\\upload"); if (!file.exists()) { file.mkdirs(); }
String fileName = "itcast" + System.currentTimeMillis() + new Random().nextInt(999999) + ".jpg";
FileOutputStream fos = new FileOutputStream(file + "\\" + fileName); int len = 0; byte[] bytes = new byte[1024]; while ((len = is.read(bytes)) != -1) { fos.write(bytes, 0, len); } socket.getOutputStream().write("上传成功".getBytes()); fos.close(); socket.close();
} catch (IOException e) { System.out.println(e); } } }).start();
} } }
|
先运行服务器端,再运行客户端。