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("登陆失败");
        }
    }
}

时间: 2024-10-06 07:46:34

Java基础知识网络编程(TCP练习)的相关文章

Java基础知识网络编程

概述 java除了可以完成本地的操作,也可以完成网络通讯.比如想从自己的电脑上发送一个信息到张三的电脑上,张三收到信息之后再给我返回一个信息,利用java实现两个机器之间的数据的通讯.数据通讯的原理就是数据传输的过程,与本机的区别就是涉及到网络. 网络通讯要具备的要素和模型: 比如和张三通讯 1.首先要找到张三的主机,张三主机的标识就是IP地址(也就是主机的名字,IP地址由4个字节表示,可以表示很多主机,避免冲突). 2.和张三通讯的方式有很多种,可以是QQ,也可以是微信.两个机器都要装有通讯的

java基础篇---网络编程(TCP程序设计)

TCP程序设计 在Java中使用Socket(即套接字)完成TCP程序的开发,使用此类可以方便的建立可靠地,双向的,持续的,点对点的通讯连接. 在Socket的程序开发中,服务器端使用serverSocket等待客户端的连接,对于Java的网络程序来讲,每一个客户端都使用一个socket对象表示. 在Java的网络程序中,客户端只要符合连接的通讯协议,那么服务端都可以进行接收. ServerSocket类主要用于服务器端程序的开发上,用于接收客户端的连接请求. Socket在服务器端每次运行时都

java基础:网络编程TCP,URL

获取域名的两种方法: package com.lanqiao.java.test; import java.net.InetAddress;import java.net.UnknownHostException; public class testInetAddress { public static void main(String[] args) throws Exception { InetAddress inet=InetAddress.getByName("www.atguigu.c

Java基础之网络编程

Java网络编程 课前思考1. 什么是TCP/IP协议?2. TCP/IP有哪两种传输协议,各有什么特点?3. 什么是URL?4. URL和IP地址有什么样的关系?5. 什么叫套接字(Socket)?6. 套接字(Socket)和TCP/IP协议的关系?7. URL和套接字(Socket)的关系?8.1 网络编程基本概念,TCP/IP协议简介 8.1.1 网络基础知识      网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯.网络编程中有两个主要的问题,一个是如何准确的定位网络

Java基础知识—网络Socket(六)

概述 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信.通常用于互联网协议,被称 TCP / IP. UDP:UDP 是用户数据报协议的缩写,一个无连接的协议.提供了应用程序之间要发送的数据的数据包. Socket编程 套接字使用TCP提供了两台计算机之间的通信机制. 客户端程序创建一个套接字,并尝试连接服务器的套接字.当连接建立时,服务器

黑马程序员-Java基础之网络编程

网络编程 实现计算机互联的三要素: 1.IP地址 本机回路IP:127.0.0.1 2.端口号(逻辑端口):用于标识应用程序. 端口号0~65535之间的整数:0~1024之间大部分已被用于一些知名的网络服务和应用,所以现在开发的网络应用程序端口号一般是1024以后的整数. 3.通信协议 TCP:三次握手机制,面向连接,稍慢.可靠 UDP:无连接,每个数据报大小限制在64K内.传输快.不可靠. 网络参考模型 TCP/IP参考模型 应用层:javaWeb开发 传输层:TCP/UDP 网际层:IP

java基础篇---网络编程

一:IP与InetAddress 在Java中支持网络通讯程序的开发,主要提供了两种通讯协议:TCP协议,UDP协议 可靠地连接传输,使用三方握手的方式完成通讯 不可靠的连接传输,传输的时候接受方不一定可以接受的到 在Java中的所有网络程序的开发类都在java.net包中存在 IP地址简介 IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写.IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络

java基础教程-网络编程(七)

七.网络编程 7.1.IP协议 最重要的贡献是IP地址 7.2.TCP和UDP协议 TCP(快)可靠传输,发送时必须建立连接(三次握手协议 ) UDP(慢)不可靠传输,发送时无须建立连接 7.3.TCP 的TCP Server和TCP Client 注意,要首先启动Server,再启动Client 端口号是应用的入口,有两个字节,所以每个服务器最多能运行65536个应用程序,而TCP的端口和UDP的端口不一样,定义端口时,尽量定义1024以上的. 特别典型的端口号,http  80: //TCP

Java基础7——网络编程

计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程就是用来实现网络互联的不同计算机上运行的程序间可以进行数据交换 网络模型研究计算机网络之间以何种规则进行通信 网络模型一般是指OSI参考模型 TCP/IP参考模型 网络编程三要素 IP地址——网络中每台计算机的唯一标识 端口——计算机上每个应用程序的唯一标识 协议——通信之间的规则 计算机只能识别二进制的