1. 程式人生 > >Java基礎知識網路程式設計(TCP練習)

Java基礎知識網路程式設計(TCP練習)

練習:複製文字

練習要求:把客戶端的一個檔案內容發到服務端,在服務端把資料儲存到一個檔案當中。相當於複製檔案。

import java.io.*;
import java.net.*;

class TxtCopyTestClient
{
    public static void main(String[] args) throws Exception
    {
        Socket s=new Socket("192.168.1.6",10003);
        BufferedReader bur=new BufferedReader(new InputStreamReader(new
FileInputStream("client.txt"))); //BufferedWriter buwOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); PrintWriter pw=new PrintWriter(s.getOutputStream(),true); String line=null; while((line=bur.readLine())!=null) { pw.println(line); } s.shutdownOutput(); BufferedReader burIn=new
BufferedReader(new InputStreamReader(s.getInputStream())); String str=burIn.readLine(); System.out.println(str); bur.close(); s.close(); } } class TxtCopyTestServer { public static void main(String[] args) throws Exception { ServerSocket ss=new ServerSocket(10003
); Socket s=ss.accept(); BufferedReader burIn=new BufferedReader(new InputStreamReader(s.getInputStream())); PrintWriter pw=new PrintWriter(new FileOutputStream("server.txt"),true); String line=null; while((line=burIn.readLine())!=null) { pw.println(line); } pw.close(); PrintWriter pwOut=new PrintWriter(s.getOutputStream(),true); pwOut.println("上傳成功"); s.close(); ss.close(); } }

練習2:上傳圖片

import java.io.*;
import java.net.*;

class PicClient 
{
    public static void main(String[] args) throws Exception
    {
        Socket s=new Socket("192.168.1.114",10003);
        FileInputStream fis=new FileInputStream("pictest.jpg");
        OutputStream os=s.getOutputStream();
        byte[] buf=new byte[1024];
        int len=0;
        while((len=fis.read(buf))!=-1)
        {
            os.write(buf,0,len);
        }

        s.shutdownOutput();

        InputStream is=s.getInputStream();
        byte[] re=new byte[1024];
        int length=is.read(re);
        String str=new String(re,0,length);
        System.out.println(str);
        fis.close();
        s.close();
    }
}

class PicServer
{
    public static void main(String[] args)throws Exception
    {
        ServerSocket ss=new ServerSocket(10003);
        Socket s=ss.accept();
        InputStream is=s.getInputStream();
        FileOutputStream fos=new FileOutputStream("serverpic.jpg");

        byte[] buf=new byte[1024];
        int len=0;
        while((len=is.read(buf))!=-1)
        {
            fos.write(buf,0,len);
        }

        OutputStream os=s.getOutputStream();
        os.write("上傳成功".getBytes());
        s.close();
        ss.close();

    }
}

練習3:客戶端併發上傳圖片

import java.io.*;
import java.net.*;

class  UploadByThreadClient
{
    public static void main(String[] args) throws Exception
    {
        if(args.length!=1)
        {
            System.out.println("請選擇一張jpg圖片");
            return;
        }

        File file=new File(args[0]);
        if(!(file.exists()&&file.isFile()))
        {
            System.out.println("該檔案有問題,要麼補存在,要麼不是檔案");
            return ;
        }
        if(!file.getName().endsWith(".jpg"))
        {
            System.out.println("圖片格式錯誤,請重新選擇");
            return ;
        }

        if(file.length()>1024*1024*5)
        {
            System.out.println("檔案過大,沒安好心");
            return ;
        }


        Socket s = new Socket("192.168.1.114",10003);

        FileInputStream fis = new FileInputStream("pictest.jpg");

        OutputStream out = s.getOutputStream();

        byte[] buf = new byte[1024];

        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];

        int num = in.read(bufIn);
        System.out.println(new String(bufIn,0,num));

        fis.close();
        s.close();

    }
}


class  UploadByThreadServer
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket ss=new ServerSocket(10003);
        while(true)
        {
            Socket s=ss.accept();
            new Thread(new AcceptThread(s)).start();
        }
    }
}


class AcceptThread implements Runnable
{
    private Socket s;
    AcceptThread(Socket s)
    {
        this.s=s;
    }

    public void run()
    {
        try
        {
            InputStream in = s.getInputStream();
            String ip=s.getInetAddress().getHostAddress();

            int count=1;
            File def=new File(ip+"("+count+")"+".jpg");
            while(def.exists())
            {
                def=new File(ip+"("+(count++)+")"+".jpg");
            }


            FileOutputStream fos = new FileOutputStream(def);

            byte[] buf = new byte[1024];

            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();
        }
        catch (Exception e)
        {
            throw new RuntimeException("上傳失敗");
        }


    }
}

這裡寫圖片描述

練習4:客戶端併發登陸

import java.io.*;
import java.net.*;


class LoginClient
{
    public static void main(String[] args)throws Exception 
    {
        Socket s=new Socket("192.168.1.6",100010);

        BufferedReader bur=new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw=new PrintWriter(s.getOutputStream(),true);

        BufferedReader burIn=new BufferedReader(new InputStreamReader(s.getInputStream()));

        for(int i=0;i<3;i++)
        {
            String user=bur.readLine();
            if(user==null)
                break;
            pw.println(user);
            String info=burIn.readLine();
            System.out.println("反饋資訊為:"+info);
            if(info.contains("歡迎"))
            {
                System.out.println("登陸成功");

                break;
            }
        }
        bur.close();
        s.close();

    }
}

class LoginServer
{
    public static void main(String[] args) throws Exception 
    {
        ServerSocket ss=new ServerSocket(100010);
        while(true)
        {

            Socket s=ss.accept();
            System.out.println("連線成功");
            new Thread(new UserLoginThread(s)).start();
        }
    }
}

class UserLoginThread implements Runnable
{
    private Socket s;
    UserLoginThread(Socket s)
    {
        this.s=s;
    }

    public void run()
    {
        try
        {
            BufferedReader burIn=new BufferedReader(new InputStreamReader(s.getInputStream()));

            for(int i=0;i<3;i++)
            {
                String user=burIn.readLine();
                System.out.println("傳送來的使用者名稱:"+user);
                if(user==null)
                {
                    System.out.println("為空"+user);
                    break;
                }

                BufferedReader bur=new BufferedReader(new FileReader("user.txt"));
                String line=null;
                boolean flag=false;
                while((line=bur.readLine())!=null)
                {
                    System.out.println("搜尋到的使用者名稱:"+line);
                    if(line.equals(user))
                    {
                        flag=true;
                        break;
                    }
                }

                if(flag)
                {
                    PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
                    pw.println(user+"歡迎您!");
                    s.close();
                    break;
                }
                else
                {
                    PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
                    pw.println("請輸入正確的使用者名稱");
                }

                bur.close();
            }

            s.close();


        }
        catch (Exception e)
        {
            throw new RuntimeException("登陸失敗");
        }
    }
}



這裡寫圖片描述