TCP实现连接传输案例

Posted xiaozhang666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP实现连接传输案例相关的知识,希望对你有一定的参考价值。

使用的类
    ServerSocket 服务器端
    
    构造方法:ServerSocket(端口号); 接收端使用
    方法:accept(); 返回一个 Socket对象
    getInetAddress();返回发送端的地址 InetAddress对象

    
    Socket 客户端 发送端
    构造方法:
        Socket(IP地址,端口号);
        Socket(主机名,端口号);
    方法:
    getPort();返回端口号
    getLocalAddress();获取Socket对象绑定的本地IP地址
    getInputStream();获取一个输入对象
    getOutputStream();获取一个输出对象

 1 服务器端创建:
 2     import java.io.FileInputStream;
 3     import java.io.IOException;
 4     import java.io.InputStream;
 5     import java.io.OutputStream;
 6     import java.net.Socket;
 7     import java.net.UnknownHostException;
 8     public class TCPSERver {
 9      public static void main(String[] args) throws IOException {
10         ServerSocket ss=new ServerSocket(8888);
11         Socket sk=ss.accept();
12         InputStream is=sk.getInputStream();
13         File f=new File("D:\test\d");
14         //判断服务器相对的文件夹是否存在
15         if(!f.exists())
16         {
17             f.mkdir();
18         }
19         //文件名改为域名+毫秒值+6位随机数
20         String filename="zys"+System.currentTimeMillis()+new Random().nextInt(99999);
21         String path=f.getAbsolutePath()+File.separator+filename+".txt";
22         FileOutputStream fo=new FileOutputStream(path);
23         byte[] b=new byte[1024];
24         int len=0;
25         while((len=is.read(b))!=-1)
26         {
27             fo.write(b,0,len);
28         }
29 
30         //回复客户端
31         OutputStream out=sk.getOutputStream();
32         out.write("上传成功".getBytes());
33         //释放
34         ss.close();
35         fo.close();
36         
37         
38     }
39 }
 1 创建客户端:
 2     import java.io.File;
 3     import java.io.FileOutputStream;
 4     import java.io.IOException;
 5     import java.io.InputStream;
 6     import java.io.OutputStream;
 7     import java.net.ServerSocket;
 8     import java.net.Socket;
 9     import java.util.Random;
10 
11     public class TCPSERver {
12      public static void main(String[] args) throws IOException {
13         ServerSocket ss=new ServerSocket(8888);
14         Socket sk=ss.accept();
15         InputStream is=sk.getInputStream();
16         File f=new File("D:\test\d");
17         //判断服务器相对的文件夹是否存在
18         if(!f.exists())
19         {
20             f.mkdir();
21         }
22         //文件名改为域名+毫秒值+6位随机数
23         String filename="zys"+System.currentTimeMillis()+new Random().nextInt(99999);
24         String path=f.getAbsolutePath()+File.separator+filename+".txt";
25         FileOutputStream fo=new FileOutputStream(path);
26         byte[] b=new byte[1024];
27         int len=0;
28         while((len=is.read(b))!=-1)
29         {
30             fo.write(b,0,len);
31         }
32 
33         //回复客户端
34         OutputStream out=sk.getOutputStream();
35         out.write("上传成功".getBytes());
36         //释放
37         ss.close();
38         fo.close();
39         
40         
41     }
42 }

 

 1 其他案例:
 2     服务器使用多线程实现多人传送文件
 3     将服务器实现代码实现Runnable接口
 4     重写run方法,封装到run方法中
 5     
 6     此代码中的ServerSocket ss=new ServerSocket(8888);接收文件语句封装到实现类中
 7     import java.io.IOException;
 8     import java.net.ServerSocket;
 9     import java.net.Socket;
10 
11     public class Demo1 {
12         public static void main(String[] args) throws IOException {
13             ServerSocket ss=new ServerSocket(8888);
14             //死循环一直接受客户端
15             while(true)
16             {
17                 Socket sk=ss.accept();
18                 MyRunnable mr=new MyRunnable(sk);
19                 new Thread(mr).start();
20                 
21             }
22             
23         }
24     }
25 
26 
27     import java.io.File;
28     import java.io.FileOutputStream;
29     import java.io.IOException;
30     import java.io.InputStream;
31     import java.io.OutputStream;
32     import java.net.Socket;
33     import java.util.Random;
34 
35     public class MyRunnable implements Runnable{
36      private Socket sk;
37     
38     public MyRunnable(Socket sk)
39     {
40         this.sk=sk;
41     }
42     
43     public void run() {
44         FileOutputStream fo=null;
45         InputStream is=null;
46         try{
47             is=sk.getInputStream();
48             File f=new File("D:\test\d");
49             if(!f.exists())
50             {
51                 f.mkdir();
52             }
53             //文件名改为域名+毫秒值+6位随机数
54             String filename="zys"+System.currentTimeMillis()+new Random().nextInt(99999);
55             String path=f.getAbsolutePath()+File.separator+filename+".txt";
56             fo=new FileOutputStream(path);
57             byte[] b=new byte[1024];
58             int len=0;
59             while((len=is.read(b))!=-1)
60             {
61                 fo.write(b,0,len);
62             }
63 
64             //回复客户端
65             OutputStream out=sk.getOutputStream();
66             out.write("上传成功".getBytes());
67             
68             }catch(IOException ex){
69                 ex.printStackTrace();
70             }finally{
71             try {
72                 fo.close();
73             } catch (IOException e) {
74                 
75                 e.printStackTrace();
76             }    
77         }
78 
79     }
80     
81 }

 

以上是关于TCP实现连接传输案例的主要内容,如果未能解决你的问题,请参考以下文章

UDP TCP概论及案例

完整案例基于Socket开发TCP传输客户端

网络传输--TCP

JavaWebUDP/TCP 简单实现汉译英服务器与客户端

如何实现TCP和UDP传输

TCP/IP传输层协议实现 - TCP连接的建立与终止(lwip)