网络编程 TCP 入门以及如何上传图片

 TCP: 客户端 ——Socket对象

          服务器——SocketServer对象



package InetAdressTest;
/*
 * 实现TCP客户端
 *  1. 创建Socket对象,服务器IP,端口
 *  2. Socket对象方法 getOutputStream获取字节输出流,写到服务器
 *  3. Socket对象方法 getInputStream获取字节输入流,读取服务器回来数据
 *  4. 关闭资源
 */
import java.io.*;
import java.net.Socket;
public class TCPclient
{
    /**客户端Socket
     * Socket类的
     * 构造
     * Socket(InetAddress address, int port)
              创建一个流套接字并将其连接到指定 IP 地址的指定端口号。
              
         Socket(String host, int port) host代表服务器端的ip地址   port代表服务器端的端口号
              方法    
       OutputStream getOutputStream()  返回此套接字的输出流。
     * @param args
     * @throws Exception
     */
    public static void main(String[] args)throws Exception {
        //创建Socket对象,服务器,端口
        Socket s=new Socket("172.16.0.162",10000);
        //2 Socket 对象方法,getOutputStream获取字节输出流,写到服务端
        OutputStream out=s.getOutputStream();
        out.write("年您凯迪克额离开的dge slg ".getBytes());
        //3 Socket 对象方法 getInputStream获取字节输入流,读取服务器回来数据
        InputStream in=s.getInputStream();
        byte[] bytes=new byte[1024];
        int len=0;
        len=in.read(bytes);
        System.out.println(new String(bytes,0,len));
        //关闭资源
        out.close();
        s.close();
 
        
    }
}




package InetAdressTest;
/*
 * 实现TCP服务器
 *  1. 创建ServerSocket对象,打开端口
 *  2. 使用ServerSocket对象方法accept获取客户端连接对象
 *  3. 客户端连接对象Socket获取IO
 *  4. Socket getInputStream获取字节输入流,读取客户端发来数据
 *  5. Socket getOutputStream获取字节输出流,将数据写回客户端
 *  6. 关闭
 */
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;



public class TCPserverSocket {
    /**ServerSocket服务器端的对象
     * 构造
     * ServerSocket(int port)  创建绑定到特定端口的服务器套接字。
     *
     * 方法:
     * Socket accept() 侦听并接受到此套接字的连接。
     * @param args
     * @throws Exception
     */
        public static void main(String[] args) throws Exception{
            
            //1创建serverSocket 对象,打开端口
            ServerSocket ss=new ServerSocket(10000);
            //2使用ServerSocket 对象方法accept获取客户端连接对象
            Socket s=ss.accept();
            String ip=s.getInetAddress().getHostAddress();
            System.out.println(ip);
            //3客户端连接对象
            //4Socket getInputStream获取字节输入流,读取客户端发来的数据
            InputStream in=s.getInputStream();
            int len=0;
            byte[] bytes=new byte[1024];
            len=in.read(bytes);
            System.out.println(new String(bytes,0,len));
            //5 Socket getOutputStream() 获取字节输出流,将数据写入客户端
            OutputStream out=s.getOutputStream();
            out.write("哈哈收到了".getBytes());
            //6关闭资源
            out.close();
            s.close();
            ss.close();
            
            
        }
}

通过TCP上传图片


/*
 * TCP图片上传客户端
 *   读图片,写到服务器
 * 读取服务器发回来的 上传成功
 */
import java.io.*;
import java.net.Socket;


public class TcpClientPage {
        public static void main(String[] args) throws  Exception{
            //1创建Socket 对象,服务器,端口
            Socket s=new Socket("172.16.0.162",10020);
            //2字节流读取图片
            FileInputStream f=new FileInputStream("/home/gch/A/2.png");
            OutputStream out=s.getOutputStream();
            int len=0;
            byte[] by=new byte[1024];
            while((len=f.read(by))!=-1){
                    out.write(by,0,len);    
                
            }
            //3客户端写个结束标记,告诉服务端
            s.shutdownOutput();
            //4读取服务器发回的上传成功
            InputStream in=s.getInputStream();
            len=in.read(by);
            System.out.println("服务器说:"+new String(by,0,len));
            //5 关闭资源
            in.close();
            out.close();
            f.close();
            s.close();
            
        }
}


/*
 *实现TCP图片上传服务器
 *  读取客户端发来图片(字节数组)
 *  将图片写到自己的文件夹 /home/gch/B
 *  将上传成功回写客户端
 */
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class TcpServerSocketPage {
        public static void main(String[] args) throws IOException{
            //1创建ServerSocket对象,打开端口
            ServerSocket ss=new ServerSocket(10020);
            //2接受ServerSocket
            Socket s=ss.accept();
            //获取字节输入流,读取客户端图片
            InputStream in=s.getInputStream();
            //将文件封装到File对象
            File fi=new File("/home/gch/B");
            //如果文件不存在,创建一个新文件
            if(!fi.exists()){
                  fi.mkdirs();
            }
            
            //对上传文件,从新命名 规则: 域名+日期+毫秒值+8随机数
            String filename="yaa"+System.currentTimeMillis()+new Random().nextInt(99999999)+".png";
            //4//创建字节输出流,写图片   "/home/B/t.png"
            FileOutputStream fo=new FileOutputStream(fi+File.separator+filename);
            byte[] by=new byte[1024];
            int len=0;
            while((len=in.read())!=-1){
                   fo.write(by,0,len);
            }
            //将上传成功写给客户端
            OutputStream out=s.getOutputStream();
             out.write("上传成功".getBytes());
             //关闭资源
             in.close();
             out.close();
               fo.close();
               ss.close();
            
            
            
            
            
            
        }
}


/*
 *实现TCP图片上传服务器
 *  读取客户端发来图片(字节数组)
 *  将图片写到自己的文件夹 /home/gch/B
 *  将上传成功回写客户端
 */
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

public class TcpServerSocketPage {
        public static void main(String[] args) throws IOException{
            //1创建ServerSocket对象,打开端口
            ServerSocket ss=new ServerSocket(10020);
            //2接受ServerSocket
            Socket s=ss.accept();
            //获取字节输入流,读取客户端图片
            InputStream in=s.getInputStream();
            //将文件封装到File对象
            File fi=new File("/home/gch/B");
            //如果文件不存在,创建一个新文件
            if(!fi.exists()){
                  fi.mkdirs();
            }
            
            //对上传文件,从新命名 规则: 域名+日期+毫秒值+8随机数
            String filename="yaa"+System.currentTimeMillis()+new Random().nextInt(99999999)+".png";
            //4//创建字节输出流,写图片   "/home/B/t.png"
            FileOutputStream fo=new FileOutputStream(fi+File.separator+filename);
            byte[] by=new byte[1024];
            int len=0;
            while((len=in.read())!=-1){
                   fo.write(by,0,len);
            }
            //将上传成功写给客户端
            OutputStream out=s.getOutputStream();
             out.write("上传成功".getBytes());
             //关闭资源
             in.close();
             out.close();
               fo.close();
               ss.close();
            
        }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值