网络编程入门

导读:本篇文章讲解 网络编程入门,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

在这里插入图片描述

简单的TCP网路程序:

在这里插入图片描述

①服务端—客户端—代码:

TcpService :

package com.test1;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpService {
    public static void main(String[] args) throws IOException {
        //创建服务器套接字对象,用于监听指定端口
        ServerSocket serverSocket=new ServerSocket(8888);
        System.out.println("服务器端启动了。。。");
        //调用accept()方法,等待客户端连接。是一个阻塞方法
        // 如果有客户端连接之后,返回一个Socket对象用于与客户端通信
        Socket socket=serverSocket.accept();
        System.out.println("有客户端过来了。。。");

        //关闭网络对象
        socket.close();
        serverSocket.close();
    }
}

TcpClient :

package com.test1;

import java.io.IOException;
import java.net.Socket;

public class TcpClient {
    public static void main(String[] args) throws IOException {
        Socket socket=new Socket("127.0.0.1",8888);
        System.out.println("客户端连接到了服务器。。。");
    }
}

布局&运行结果:

在这里插入图片描述
在这里插入图片描述

② 服务器向客户端回写数据—客户端接受&客户端向服务器回写数据—服务端接受—代码:

TcpServer :

package com.test2;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
    public static void main(String[] args) {
        //定义服务器Socket对象(通信对象)
        ServerSocket serverSocket=null;
        //读取流
        BufferedReader br = null;
        //写出流
        PrintWriter pw = null;

        try {
            //监听端口
            serverSocket = new ServerSocket(8888);
            System.out.println("服务器启动了....");
            //等待客户端连接,如果客户端有连接过来,会生成一个Socket对象,用于与客户端通信
            Socket socket = serverSocket.accept();
            System.out.println("客户端连接过来了....");

            //通过Socket对象,获取输入流
            //缓冲字符输入流,用于读取客户端输入的信息
            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //读取客户端传过来的信息
            String msg = br.readLine();
            System.out.println("客户端:"+msg);

            //通过Socket对象,获取输出流
            //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
            //bw.write("asdfasdf\n"); //输出信息加\n之后,信息才会发送出去
            pw = new PrintWriter(socket.getOutputStream());
            //向客户端输出信息
            pw.println("客户端你好!");
            //清空缓冲区
            pw.flush();


        } catch (IOException e) {
            e.printStackTrace();
        }finally {

            if(pw!=null){
                pw.close();
            }

            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(serverSocket!=null) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

TcpClient :

package com.test2;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class TcpClient {
    public static void main(String[] args) {

        Socket socket = null;
        PrintWriter pw =null;
        BufferedReader br = null;
        try {
            //创建Socket对象连接服务器
            socket = new Socket("127.0.0.1",8888);
            System.out.println("客户端连上了服务器.....");

            //创建输出流,用于向服务器输出信息
            pw = new PrintWriter(socket.getOutputStream());

            //向服务器发送信息
            pw.println("服务器你好,我是客户端...");
            pw.flush();

            //创建输入流,用户获取服务器传入的信息
            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //获取服务器的信息
            String msg = br.readLine();
            System.out.println("服务器:"+msg);


        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(pw!=null){
                pw.close();
            }

            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

布局&运行结果:

在这里插入图片描述
在这里插入图片描述

③ 客户端服务器端循环交互—代码:

TcpServer :

package com.test3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class TcpServer {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //定义服务器Socket对象(通信对象)
        ServerSocket serverSocket=null;
        //读取流
        BufferedReader br = null;
        //写出流
        PrintWriter pw = null;

        try {
            //监听端口
            serverSocket = new ServerSocket(8888);
            System.out.println("服务器启动了....");
            //等待客户端连接,如果客户端有连接过来,会生成一个Socket对象,用于与客户端通信
            Socket socket = serverSocket.accept();
            System.out.println("客户端连接过来了....");

            //通过Socket对象,获取输入流
            //缓冲字符输入流,用于读取客户端输入的信息
            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //通过Socket对象,获取输出流
            //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
            //bw.write("asdfasdf\n"); //输出信息加\n之后,信息才会发送出去
            pw = new PrintWriter(socket.getOutputStream());

            while (true){
                //读取客户端信息
                String info = br.readLine();
                System.out.println("客户端:"+info);

                //判断客户端是否说88
                if(info.contains("886")){
                    System.out.println("服务器:886");
                    //服务器回应886
                    pw.println("886");
                    pw.flush();
                    break;
                }

                //服务器向客户端写信息
                System.out.print("服务器:");
                String msg = scanner.next();
                pw.println(msg);
                pw.flush();

            }


        } catch (IOException e) {
            e.printStackTrace();
        }finally {

            if(pw!=null){
                pw.close();
            }

            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(serverSocket!=null) {
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

TcpClient :

package com.test3;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class TcpClient {
    public static void main(String[] args) {
        //输入工具类
        Scanner scanner = new Scanner(System.in);

        Socket socket = null;
        PrintWriter pw =null;
        BufferedReader br = null;
        try {
            //创建Socket对象连接服务器
            socket = new Socket("127.0.0.1",8888);
            System.out.println("客户端连上了服务器.....");
            //创建输出流,用于向服务器输出信息
            pw = new PrintWriter(socket.getOutputStream());
            //创建输入流,用户获取服务器传入的信息
            br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            while (true){
                //客户端先向服务器输出信息
                System.out.print("客户端:");
                String msg = scanner.next();
                //向服务器发送信息
                pw.println(msg);
                pw.flush();

                //接收服务器信息
                String info = br.readLine();
                System.out.println("服务器:"+info);
                if(info.contains("886")){
                    //客户端给服务器回应886
                    System.out.println("客户端:886");
                    pw.println("886");
                    pw.flush();
                    break;
                }
            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(br!=null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if(pw!=null){
                pw.close();
            }

            if(socket!=null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

布局&运行结果:

在这里插入图片描述
在这里插入图片描述

④ 代码:

MyTomcat :

package com.test4;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class MyTomcat {
    public static void main(String[] args) throws IOException {
        ServerSocket tomcatServer = new ServerSocket(8080);
        System.out.println("tomcat 启动了.....");
        Socket socket = tomcatServer.accept();
        System.out.println("客户端来请求了......");
        socket.getInputStream();

    }
}

布局&运行结果:

在这里插入图片描述
在这里插入图片描述

UDP:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

①(简单案例)接受方—发送方—代码:

UdpRecv :

package com.test5;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * 接收方
 */
public class UdpRecv {
    public static void main(String[] args) throws IOException {
        //定义socket对象,监听端口,接收数据
        DatagramSocket dsRecv = new DatagramSocket(4141);
        System.out.println("接收方启动了,等待接收数据...");
        //创建数据报文对象,用于接收对方数据
        byte[] bs = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bs,bs.length);
        //使用socket接收数据
        dsRecv.receive(dp);
        System.out.println("lenth:"+dp.getLength());
        //将接收的数据,封装为字符串
        String info = new String(bs,0,dp.getLength());
        System.out.println("小A:"+info);
        //关闭网络对象
        dsRecv.close();
    }
}

UdpSend :

package com.test5;

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

/**
 * 发送方
 */
public class UdpSend {
    public static void main(String[] args) throws IOException {
        //创建数据报Socket对象
        DatagramSocket dsSend = new DatagramSocket();
        //创建要发送的信息
        byte[] bs = "你好,我是小A".getBytes();
        //创建要发送的数据报文对象
        DatagramPacket dp = new DatagramPacket(
                bs,bs.length, InetAddress.getByName("127.0.0.1"),4141
        );
        System.out.println("发送发准备发送数据...");
        //通过socket发送数据报
        dsSend.send(dp);

        //关闭网络对象
        dsSend.close();
    }
}

布局&运行结果:

在这里插入图片描述
在这里插入图片描述

②(简单版本聊天)小明小兰循环交互—代码:

UdpXM :

package com.test6;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;

/**
 * 小明:发送/接收消息  4141
 */
public class UdpXM {
    public static void main(String[] args) {
        //发送socket
        DatagramSocket dsSend=null;
        //接收socket
        DatagramSocket dsRecv=null;
        //数据报文
        DatagramPacket dp = null;
        //缓冲(临时存储)字节数据
        byte[] bs =null;
        //消息内容
        String msg = null;
        Scanner scanner = new Scanner(System.in);

        try {
            //创建发送Socket
            dsSend = new DatagramSocket();
            //创建接收Socket,并绑定4141端口
            dsRecv = new DatagramSocket(4141);

            System.out.println("......我是小明.....");

            //循环聊天
            while (true){

                //接收小兰消息
                //构建数据报文对象,内部关联字节数组,用于存储接收到的数据
                bs = new byte[1024];
                dp = new DatagramPacket(bs,bs.length);
                dsRecv.receive(dp);
                //将接收的信息显示
                msg = new String(bs,0,dp.getLength());
                System.out.println("小兰:"+msg);
                //如果小兰终止聊天
                if(msg.contains("886")){
                    //System.out.println("小明:886");
                    bs = "886".getBytes();
                    dp = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),4242);
                    dsSend.send(dp);
                    break;
                }

                //发送消息给小兰
                System.out.print("小明:");
                msg = scanner.next();
                bs = msg.getBytes();
                dp = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),4242);
                dsSend.send(dp);
            }

        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            if(dsSend!=null)
                dsSend.close();
            if(dsRecv!=null)
                dsRecv.close();
        }
    }
}

UdpXL :

package com.test6;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

/**
 * 小兰:发送/接收消息 4242
 */
public class UdpXL {
    public static void main(String[] args) {
        //接收socket
        DatagramSocket dsRecv = null;
        //发送socket
        DatagramSocket dsSend = null;
        //数据报文对象
        DatagramPacket dp = null;
        //字节数组
        byte[] bs = null;
        //消息内容
        String msg = null;
        //scanner
        Scanner scanner = new Scanner(System.in);


        try {
            //创建接收socket监听端口
            dsRecv = new DatagramSocket(4242);
            //创建发送socket
            dsSend = new DatagramSocket();

            System.out.println("......我是小兰......");

            while (true){

                //小兰向小明发消息
                System.out.print("小兰:");
                msg = scanner.next();
                bs = msg.getBytes();
                dp = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),4141);
                dsSend.send(dp);

                //小兰接收小明的消息
                dp=  new DatagramPacket(bs,bs.length);
                dsRecv.receive(dp);
                msg = new String(bs,0,dp.getLength());
                System.out.println("小明:"+msg);
                if(msg.contains("886")){
                    //System.out.println("小兰:886");
                    bs = "886".getBytes();
                    dp = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),4141);
                    dsSend.send(dp);
                    break;
                }
            }

        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

布局&运行结果:

在这里插入图片描述

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118024.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!