黑马程序员---2015.6.28java基础笔记--网络--URL--URLConnection

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1.TCP演示2,客户端给服务端发送数据,服务端收到后,给客户端反馈信息。

/*
演示TCP传输
TCP分为客户端和服务端
客户端对应的对象是:Socket
服务端对应的对象是:ServerSocket

演示tcp的传输的客户端和服务端的互访。

需求:客户端给服务端发送数据,服务端收到后,给客户端反馈信息。

客户端:
1,建立socket服务。指定要连接主机和端口。
2,获取socket流中的输出流。将数据写到该流中。通过网络发送给服务端。
3,获取socket流中的输入流,将服务端反馈的数据获取到,并打印。
4,关闭客户端资源。
*/

import java.net.*;
import java.io.*;
class Client2
{
    public static void main(String[] args) throws Exception
    {
        //创建Socket服务,并指定主机,和端口号
        Socket s = new Socket("192.168.1.106",10004);
        //为了发送数据,所以得先获取输出流
        OutputStream os = s.getOutputStream();
        os.write("hello world".getBytes());
        //为了接受数据,所以获得输入流
        InputStream is = s.getInputStream();
        byte[] buf = new byte[1024];
        int len = is.read(buf);
        System.out.println(new String(buf,0,len));
        //关闭流
        s.close();
    }
}


/*
需求:定义端点接收数据并打印在控制台上。

服务端:
1,建立服务端的socket服务。ServerSocket();
    并监听一个端口。
2,获取连接过来的客户端对象。
    通过ServerSokcet的 accept方法。没有连接就会等,所以这个方法阻塞式的。
3,客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户端对象的读取流来读取发过来的数据。
    并打印在控制台。
4,获取客户端输出流,输出数据
5,关闭服务端。(可选)
*/
class Server2
{
    public static void main(String[] args) throws Exception
    {
        //建立服务端socket,并监听一个端口
        ServerSocket ss = new ServerSocket(10004);
        //获取客户端连接过来的对象
         Socket s = ss.accept();
        //获取客户端对象的流,进行读取数据
        InputStream is = s.getInputStream();
        byte[] b = new byte[1024] ;
        int len = is.read(b);
        System.out.println(new String(b,0,len)+s.getInetAddress().getHostAddress());
        //获取客户端对象输出流
        OutputStream os = s.getOutputStream();
        os.write("服务端已收到".getBytes());
        s.close();
        ss.close();
    }
}



2.
/*
需求:建立一个文本转换服务器。
客户端给服务端发送文本,服务单会将文本转成大写在返回给客户端。
而且客户度可以不断的进行文本转换。当客户端输入over时,转换结束。

分析:
客户端:
既然是操作设备上的数据,那么就可以使用io技术,并按照io的操作规律来思考。
源:键盘录入。
目的:网络设备,网络输出流。
而且操作的是文本数据。可以选择字符流。

步骤
1,建立服务。
2,获取键盘录入。
3,将数据发给服务端。
4,后去服务端返回的大写数据。
5,结束,关资源。

都是文本数据,可以使用字符流进行操作,同时提高效率,加入缓冲。
*/
import java.io.*;
import java.net.*;
class ClientTrans
{
    public static void main(String[] args) throws Exception
    {
        //创建客户端Socket
        Socket s = new Socket("192.168.1.106",10006);
        BufferedReader bufr =
                        new BufferedReader(new InputStreamReader(System.in));
        //获取Socket输出流
        BufferedWriter bufOut =
                        new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        //获取Socket输入流
        BufferedReader bufIn =                
                        new BufferedReader(new InputStreamReader(s.getInputStream()));
        String temp = null;
        
        //键盘录入不为空
        while((temp=bufr.readLine())!=null)
        {
            if("over".equals(temp))
                break;
            //将读到了一行数据写到Socket的输出流中
            bufOut.write(temp);
            //因为接受端是读一行数据,一行数据的结束时换行符,所以应该传一个换行符过去
            bufOut.newLine();
            //将缓冲区中的数据,刷出去
            bufOut.flush();
            System.out.println(bufIn.readLine());
        }
        bufr.close();                
        s.close();
    }
}

/*
    服务器端
*/
class ServerTrans
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket ss = new ServerSocket(10006);
        Socket s = ss.accept();
        //获取Socket输出流
        BufferedWriter bufOut =
                        new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        //获取Socket输入流
        BufferedReader bufIn =                
                        new BufferedReader(new InputStreamReader(s.getInputStream()));
        System.out.println(s.getInetAddress().getHostAddress());
        String temp = null;
        while((temp=bufIn.readLine())!=null)
        {
            System.out.println(temp);
            String str = temp.toUpperCase();
            bufOut.write(str);
            bufOut.newLine();
            bufOut.flush();
        }
        ss.close();
        s.close();
    }
}


3.客户端上传文件到服务器端
/*客户端上传文件到服务器端,
    服务器接收到返回“上传成功”
*/
import java.io.*;
import java.net.*;
class TextClient
{
    public static void main(String[] args) throws Exception
    {
        //创建客户端Socket
        Socket s = new Socket("192.168.1.106",10006);
        BufferedReader bufr =
                        new BufferedReader(new FileReader("IPDemo.java"));
        //Socket输出流
        PrintWriter pw = new PrintWriter(s.getOutputStream(),true);                
        //Socket输入流
        BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
        String temp = null;
    
        while((temp=bufr.readLine())!=null)
        {
            pw.println(temp);    
        }
        //关闭客户端的输出流。相当于给流中加入一个结束标记-1.
        s.shutdownOutput();
        System.out.println(bufIn.readLine());
        bufr.close();                
        s.close();
    }
}

/*
    服务器端
*/
class TextServer
{
    public static void main(String[] args) throws Exception
    {
        ServerSocket ss = new ServerSocket(10006);
        Socket s = ss.accept();
        //创建服务端往本地的输出流
        PrintWriter pw =
                        new PrintWriter(new FileOutputStream(new File("upload.txt")),true);
        //获取Socket输入流
        BufferedReader bufIn =                
                        new BufferedReader(new InputStreamReader(s.getInputStream()));
        //Socket输出流
        PrintWriter pOut = new PrintWriter(s.getOutputStream(),true);    
        System.out.println(s.getInetAddress().getHostAddress());
        String temp = null;
        while((temp=bufIn.readLine())!=null)
        {
            pw.println(temp);
        }
        pOut.println("上传成功!");
        pw.close();
        ss.close();
        s.close();
    }
}



4.
/*
需求:上传图片。
            服务器多线程接收不同客户端传送的数据
            
            键盘输入客户端要传送的文件名,并判断。
            
            服务器端,要是上传的文件名重复,则写新的文件名

客户端。
1,服务端点。
2,读取客户端已有的图片数据。
3,通过socket 输出流将数据发给服务端。
4,读取服务端反馈信息。
5,关闭。

*/
import java.io.*;
import java.net.*;
class PicClient
{
    public static void main(String[] args) throws Exception
    {
        Socket s = new Socket("192.168.1.106",10008);

        //动态输入文件名
        if(args.length!=1)
        {
            System.out.println("请输入一个文件名");
            return;
        }
        
        //判断是否符合要求
        File f = new File(args[0]);
        if(!(f.exists() && f.isFile()))
        {
            System.out.println("请正确的文件");
            return;
        }
        if(!(f.getName().endsWith(".bmp") || f.getName().endsWith(".jpg")))
        {
            System.out.println("请输入正确的图片文件");
            return;
        }
        
        FileInputStream fis = new FileInputStream(f);
        OutputStream fos = s.getOutputStream();
        byte[] buf = new byte[1024];
        int len = 0;
        while((len=fis.read(buf))!=-1)
        {
            fos.write(buf,0,len);
        }
        s.shutdownOutput();
        InputStream fisIn = s.getInputStream();
        byte[] buf2 = new byte[1024];
        int len2 = fisIn.read(buf2);
        System.out.println(new String(buf2,0,len2));
        s.close();
        fis.close();
    }
}


/*
    服务器端利用线程
*/
class PicThread implements Runnable
{
    private Socket s = null;
    PicThread(Socket s)
    {
        this.s = s;
    }
    
    public void run()
    {
        FileOutputStream fos  = null;
        try
        {
            String ip = s.getInetAddress().getHostAddress();
            System.out.println(ip+"........connected");
            InputStream is = s.getInputStream();
            
            /*
                判断文件是否存在,若是存在就"upload("+(count++)+").jpg"
            */
            File f = new File("upload.jpg");
            int count = 1;
            while(f.exists())
            {
                f = new File("upload("+(count++)+").jpg");
            }
            fos = new FileOutputStream(f);
            byte[] buf = new byte[1024];
            int len = 0;
            while((len=is.read(buf))!=-1)
            {
                fos.write(buf);
            }
            
            OutputStream os = s.getOutputStream();
            os.write("上传成功".getBytes());
            s.close();
            fos.close();
        }catch(IOException e)
        {
            throw new RuntimeException("出错");    
        }
    }
}

class PicServer
{
    public static void main(String[] args)throws Exception
    {
        ServerSocket ss = new ServerSocket(10008);
        while(true)
        {
            Socket s = ss.accept();
            new Thread(new PicThread(s)).start();
        }
        //ss.close();
    }
}


6.URL应用
import java.net.*;
class URLDemo
{
    public static void main(String[] args) throws MalformedURLException
    {
        URL url = new URL("http://192.168.1.254/myweb/demo.html?name=haha&age=30");
        System.out.println("getProtocol() :"+url.getProtocol());
        System.out.println("getHost() :"+url.getHost());
        System.out.println("getPort() :"+url.getPort());
        System.out.println("getPath() :"+url.getPath());
        System.out.println("getFile() :"+url.getFile());
        System.out.println("getQuery() :"+url.getQuery());

        /*int port = getPort();
        if(port==-1)
            port = 80;

        getPort()==-1
        */
    }
}
/*
 String getFile()
          获取此 URL 的文件名。
 String getHost()
          获取此 URL 的主机名(如果适用)。
 String getPath()
          获取此 URL 的路径部分。
 int getPort()
          获取此 URL 的端口号。
 String getProtocol()
          获取此 URL 的协议名称。
 String getQuery()
          获取此 URL 的查询部
*/


7.URLConnection连接到服务器并获取返回数据
import java.net.*;
import java.io.*;
class  URLConnectionDemo
{
    public static void main(String[] args) throws Exception
    {
        URL url = new URL("http://192.168.1.254:8080/myweb/demo.html");

        URLConnection conn = url.openConnection();
        System.out.println(conn);
        
        InputStream in = conn.getInputStream();

        byte[] buf = new byte[1024];

        int len = in.read(buf);

        System.out.println(new String(buf,0,len));
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值