• Java——网络编程


    


    // TODO Auto-generated method stub

    //获取本地主机IP对象

    InetAddress ip = InetAddress.getLocalHost();

    System.out.println(ip.getHostAddress());

    System.out.println(ip.getHostName());

    //获取其他主机ip地址对象

    ip = InetAddress.getByName("www.sina.com");

    System.out.println(ip.getHostAddress());

    System.out.println(ip.getHostName());



    通讯的两端

    UDP建立

    System.out.println("发送端启动--------------------------------");

    /*

     * 创建UDP传输的发送端。

     * 思路:

     * 1.建立udp的socket服务。

     * 2.将要发送的数据进行封装到数据包中。

     * 3.通过udp的socket服务将数据包发送过去。

     * 4.关闭socket服务。

     */

    //1.udpsocket服务,使用DatagramSocket对象。

    DatagramSocket ds = new DatagramSocket();

    //2.将要发送的 数据进行封装到数据保种。 

    String str = "嗨。哥们是杨超!!!";

    //使用DatagramPacket将数据封装到该对象中。

    byte[] buf = str.getBytes();

    DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10000);

    //3.通过UDP的socket服务将数据包发送出去。  使用send方法

    ds.send(dp);

    //关闭资源

    ds.close();

    ---------------------------------------------------------------------------------------------------------

    System.out.println("接受端启动-----------------------------------");

    /*

     * 建立UDP接受端的思路:

     * 思路:

     * 1.建立udp socket服务。   因为是要接受数据   所以  必须要明确一个端口号。。。。****

     * 2.创建数据包,用存储接收到的数据。方便使用数据包对象的方法解析这些数据。

     * 3.使用socket服务的receive方法将接收到的数据存储到数据包中。

     * 4.通过数据包的方法解析数据包中的数据。

     * 5.关闭资源。

     */

    //1.建立udp socket服务。

    DatagramSocket ds = new DatagramSocket(10000);

    //创建数据包

    byte[] buf = new byte[1024];

    DatagramPacket dp = new DatagramPacket(buf, buf.length);

    //3.使用接受方法将数据包存储到数据包中。

    ds.receive(dp);//阻塞式的方法*********

    //4.通过数据包对象的方法。  解析其中的数据,比如  地址,端口, 数据内容。

    String ip = dp.getAddress().getHostAddress();

    int port = dp.getPort();

    String text = new String(dp.getData(), 0, dp.getLength() );

    System.out.println(text);

    ds.close();

    =================================================================================

    //服务器端接收客户端发送过来的数据, 并打印在控制台上。

    /*

     * 建立tcp服务器端的思路:

     * 1.创建服务器socket服务,通过ServerSocket对象。

     * 2.服务端必须对外提供一个端口,否则客户端无法连接。

     * 3.获取链接过来的的客户端对象。

     * 4.通过客户端对象获取socket流读取客户端发来的数据。并打印在控制台上。

     * 5,关闭资源,关闭客户端资源,关闭服务器段资源。

     */

    //1.创建服务器对象。

    ServerSocket ss = new ServerSocket(100002);

    //2获取连接过来的客户端对象。

    Socket s = new Socket();

    String ip = s.getInetAddress().getHostAddress();

    //3通过socket对象获取输入流,  尧都区客户端发来的数据。

    InputStream in = s.getInputStream();

    byte[] buf = new byte[1024];

    int len = in.read(buf);

    String text = new String(buf, 0, len);

    System.out.println(ip + ":" + text);

    s.close();

    ---------------------------------------------------------------------------------------------

    /*

     * 

     * 

     * 

     */

    //创建客户端socket服务。

    Socket socket = new Socket("127.0.0.1", 10002);

    //获取socket流中的输出 流

    OutputStream out = socket.getOutputStream();

    //使用输出流将指定的数据写出去。

    out.write("我是杨超,我正在学习java!".getBytes());

    //关闭资源

    socket.close();

    ====================================================================================

    /*

     * 思路:

     * 客户端:

     * 1.需要创建socket端点。

     * 2,客户端的数据源:键盘:

     * 3.客户端的目的:  socket

     * 4.接收服务器的数据,  源:socket

     * 5,将数据显示在打印出来,  目的:  控制台。

     * 6.在这些流中操作数据,都是文本数据。

     * 

     * 转换客户端:

     * 1.创建socket客户端对象。

     * 2.获取键盘录入,

     * 3.将录入的信息 发送给socket输出流。

     */

    //1.创建  socket  客户端对象。

    Socket s = new Socket("127.0.0.1", 10004);

    //2.获取键盘录入。

    BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

    //3socket输出流

    PrintWriter out = new PrintWriter(s.getOutputStream(), true);

    //4.socket输入流,  读取服务器端返回的大写数据

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

    String line = null;

    while((line=bufr.readLine()) != null)

    {

    if("over".equals(line))

    {

    break;

    }

    out.println(line);

    //读取服务器端返回的  一行大写  

    String upperStr = bufIn.readLine();

    System.out.println(upperStr);

    }

    s.close();

    }

    -------------------------------------------------------------------------------------------------------

    /*

     * 服务器端:

     * 转换分析:

     * 1.serversocket服务。

     * 2.获取socket对象。

     * 3.源:  socket 读取客户端发过来的需要转换的数据。

     * 4.目的:  显示 在控制台上,

     * 5.将数据装换成大写  发给客户端。

     */

    //1.获取serversocket对象 。

    ServerSocket ss = new ServerSocket(10004);

    //2.获取socket对象。

    Socket s = ss.accept();

    //获取ip

    String ip = s.getInetAddress().getHostAddress();

    System.out.println(ip+"连接进来了!!");

    //3.获取socket 读取流。  并装饰。

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

    //4.获取socket的输出流 。 并装饰。

    PrintWriter out = new PrintWriter(s.getOutputStream(), true);

    String line = null;

    while((line=bufIn.readLine()) != null)

    {

    System.out.println(line);

    out.println(line.toUpperCase());

    }

    s.close();

    ss.close();

    ========================================================================================================

    /*服务器端:  上传文本文件

     * 

     */

    ServerSocket ss = new ServerSocket(10005);

    Socket s = ss.accept();

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

    BufferedWriter bufw = new BufferedWriter(new FileWriter("server.txt"));

    String line = null;

    while((line=bufIn.readLine()) != null)

    {

    // if("over".equals(line))

    // break;

    bufw.write(line);

    bufw.newLine();

    bufw.flush();

    }

    PrintWriter out = new PrintWriter(s.getOutputStream(), true);

    out.println("上传成功@!");

    bufw.close();

    s.close();

    ss.close();

    -------------------------------------------------------------------------------

    /*

     * 客户端:   上传文本文件。

     * 

     */

    Socket s = new Socket();

    BufferedReader bufr = new BufferedReader(new FileReader("xx.text"));

    PrintWriter out = new PrintWriter(s.getOutputStream(), true);

    String line = null;

    while((line=bufr.readLine()) != null)

    {

        out.println(line);

    }

    //数据写完后  告诉服务器端

    // out.println("over");

    s.shutdownOutput();

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

    String str = bufIn.readLine();

    System.out.println(str);

    bufr.close();

    s.close();


    ======================================================================================================

    上传图片

    public class UploadPicServer

    {

    public static void main(String[] args) throws IOException

    {

    /*服务器端:   图片上传:

     * 

     */

    //1.创建socket服务端:

    ServerSocket ss = new ServerSocket(10006);

    while(true)

    {

    //2.获取客户端:

    Socket s = ss.accept();

    new Thread(new UpLoadTest(s)).start();

    }

    }

     

    }

     

    class UpLoadTest implements Runnable

    {

    private Socket s;

    public UpLoadTest(Socket s)

    {

    this.s = s;

    }

     

    @Override

    public void run()

    {

    // TODO Auto-generated method stub

    //3.读取客户端发来的数据

    try

    {

    InputStream in = s.getInputStream();

    //4.将读取到的数据 存储到  一个文件中。

    FileOutputStream fos = new FileOutputStream("server.jpg");

    byte[] buf =  new byte[1024];

    int len = 0;

    while((len=in.read(buf)) != -1)

    {

        fos.write(buf, 0, len);

    }

    //获取socket输出流   将上传信息情况  发送给客户端。

    OutputStream out  = s.getOutputStream();

    out.write("上床成功!".getBytes());

    fos.close();

    }

    catch (IOException e)

    {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    finally

    {

    try

    {

    s.close();

    }

    catch (IOException e)

    {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }

     ----------------------------------------------------------------------------------------------------------------------------------------


    /*  客户端: 上传图片

     * 

     */

    //1.创建  客户端socket

    Socket s = new Socket("127.0.0.1", 10006);

    //2.读取客户端要上传的文件

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

    //3.获取socket输出流,  将读到的的数据  发送给服务端。

    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 lenIn = in.read(bufIn);

    String text = new String(buf, 0, lenIn);

    System.out.println(text);

    fis.close();

    s.close();

     







    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    @synthesize 有什么好处?
    javascript isNaN
    nodejs 与 mysql联接
    SQL SERVER 2008 架构
    sql server 2008 索引
    sql server 2008 (3)
    sql server 2008 (1)(2)
    c# 中的 Trim
    无法将该规则转化为等效的IIS格式,因为有不支持的标记:E
    如何解决近期微赞或微擎有些模块提示不是官方安装的解决办法
  • 原文地址:https://www.cnblogs.com/blogs-chao/p/4764918.html
Copyright © 2020-2023  润新知