- package first;
- import java.net.*;
- import java.io.*;
- /*如何定义线程呢?只要了明白了每个客户端要在服务端执行的代码即可
- * 将改代码存入run方法中。
- * */
- class ClientTcp {
- public static void main(String[] args) throws Exception {
- Socket s = new Socket("192.168.1.254", 80001);
- FileInputStream fis = new FileInputStream("C:\\1.txt");
- OutputStream out = s.getOutputStream();
- byte[] buf = new byte[1024 * 64];
- int len = 0;
- while ((len = fis.read(buf)) != -1) {
- out.write(buf, 0, len);
- }
- // 告诉服务端数据已经写完
- s.shutdownOutput();
- InputStream in = s.getInputStream();
- byte[] bufin = new byte[1024 * 64];
- int num = in.read(bufin);
- System.out.println(new String(bufin, 0, num));
- fis.close();
- s.close();
- }
- }
- /*服务端:
- 这个服务端有一个局限性,当a客户端连接上之后,被服务端获取到,服务端执行具体流程,
- 这是b客户端连接,只有等待。
- 因为服务端还没有处理完A客户端的请求,还要循环回来执行下次accept方法。所以
- 暂时获取不到b客户端对象,
- 那么为了可以让多个客户端同时并发访问服务端。
- 那么服务端最好就是让每一个客户端封装到一个单独 的线程中去,这样可以同时处理多个客户端请求。
- */
- class ServerTcp {
- public static void main(String[] args) throws Exception {
- ServerSocket ss = new ServerSocket(80001);
- // 这里写while(true),服务端不会一直转,accept她是阻塞式方法。
- while (true) {
- // 拿到客户端对象
- Socket s = ss.accept();
- // 读取s中的数据
- InputStream in = s.getInputStream();
- FileOutputStream fos = new FileOutputStream("server.bmp");
- byte[] buf = new byte[1024 * 64];
- int len = 0;
- while ((len = in.read(buf)) != -1) {
- fos.write(buf, 0, len);
- }
- // 搞一个输出流,反馈给客户信息,显示上传成功
- OutputStream out = s.getOutputStream();
- out.write("上传成功".getBytes());
- fos.close();
- s.close();
- // ss.close();
- }
- }
- }
复制代码 怎么在一个.java里执行两个main方法,顺便看下程序?
|
|