网络编程

网络概述

  

IP地址

 IP地址组成

  

  

 IP命令

  

 DNS

  

网络服务器

  

网络通信协议

  

基于TCP协议的Socket编程

  

  

  

import java.io.Serializable;

public class User implements Serializable {
    private String name;
    private String pwd;

    public User() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public User(String name, String pwd) {
        super();
        this.name = name;
        this.pwd = pwd;
    }
}
用户类
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerLogin {

    public static void main(String[] args) {
        // 1、创建一个ServerSocket对象,指定端口号
        try {
            ServerSocket serverSocket = new ServerSocket(8000);
            // 2、监听者客户端请求
            Socket socket = serverSocket.accept();
            // 3、打开流,处理用户请求
            InputStream is = socket.getInputStream();
            OutputStream os = socket.getOutputStream();
            ObjectInputStream ois = new ObjectInputStream(is);
            User user;
            try {
                user = (User) ois.readObject();
                System.out.println("我是服务器,客户端信息为:" + user.getName() + ",密码"
                        + user.getPwd());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            socket.shutdownInput();
            // 服务器给客户端一个响应
            String info = "欢迎您,登录成功!";
            os.write(info.getBytes());
            // 4、关闭资源
            ois.close();
            os.close();
            is.close();
            socket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
服务器端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;

public class ClientLogin {

    public static void main(String[] args) {
        // 1、创建一个socket对象(指定服务器IP,端口号)
        try {
            Socket socket = new Socket("localhost", 8000);
            // 2、打开流,发送请求
            OutputStream os = socket.getOutputStream();
            InputStream is = socket.getInputStream();
            User user = new User("TOM", "1234"); // 创建用来发送的对象
            ObjectOutputStream oos = new ObjectOutputStream(os);
            oos.writeObject(user);
            socket.shutdownOutput();
            // 接收服务器反馈
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String info = "";
            while ((info = br.readLine()) != null) {
                System.out.println("我是客户端,服务器的响应是:" + info);
            }
            // 3、关闭资源
            oos.close();
            is.close();
            os.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
客户端

 多线程处理多请求

  

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

import cn.bdqn.xhd.socket2.LoginThread;

public class ServerLogin {

    public static void main(String[] args) {
        // 1、创建一个ServerSocket对象,指定端口号
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(8000);
            // 持续监听
            while (true) {
                Socket socket = serverSocket.accept();
                LoginThread loginThread = new LoginThread(socket);
                loginThread.start(); // 启动线程,处理客户端请求
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
监听的服务器端
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.Socket;

import cn.bdqn.xhd.socket.User;

public class LoginThread extends Thread {
    Socket socket = null;

    public LoginThread(Socket socket) {
        this.socket = socket;
    }

    // 处理用户请求
    public void run() {
        try {
            // 3、打开流,处理用户请求
            InputStream is = socket.getInputStream();
            OutputStream os = socket.getOutputStream();
            ObjectInputStream ois = new ObjectInputStream(is);
            User user;
            try {
                user = (User) ois.readObject();
                System.out.println("我是服务器,客户端信息为:" + user.getName() + ",密码"
                        + user.getPwd());
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            socket.shutdownInput();
            // 服务器给客户端一个响应
            String info = "欢迎您,登录成功!";
            os.write(info.getBytes());
            // 4、关闭资源
            ois.close();
            os.close();
            is.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
处理请求的线程

基于UDP协议的网络编程

  

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

public class Send {

    public static void main(String[] args) {
        InetAddress ia = null;
        DatagramSocket ds = null;

        try {
            String mess = "你好,我想咨询一个问题。";
            // 显示与本地对话框
            System.out.println("我说:" + mess);
            // 获取本地主机地址
            ia = InetAddress.getByName("localhost");
            // 创建DatagramPacket对象,封装数据
            DatagramPacket dp = new DatagramPacket(mess.getBytes(),
                    mess.getBytes().length, ia, 8800);
            // 创建DatagramSocket对象,向服务器发送数据
            ds = new DatagramSocket();
            ds.send(dp);

            byte[] buf = new byte[1024];
            DatagramPacket dpre = new DatagramPacket(buf, buf.length);
            ds.receive(dpre);
            // 显示接收到的信息
            String reply = new String(dpre.getData(), 0, dpre.getLength());
            System.out.println(dpre.getAddress().getHostAddress() + "说:"
                    + reply);

        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭DatagramSocket对象
            ds.close();
        }
    }

}
发送端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import java.net.SocketException;

public class Receive {

    public static void main(String[] args) {
        DatagramPacket dp = null;
        DatagramSocket ds = null;
        DatagramPacket dpto = null;
        try {
            // 创建DatagramPacket对象,用来准备接收数据包
            byte[] buf = new byte[1024];
            dp = new DatagramPacket(buf, buf.length);
            // 创建DatagramSocket对象,接收数据
            ds = new DatagramSocket(8800);
            ds.receive(dp);
            // 显示接收到的信息
            String mess = new String(dp.getData(), 0, dp.getLength());
            System.out.println(dp.getAddress().getHostAddress() + "说:" + mess);

            String reply = "你好,我在,请咨询!";
            // 显示与本地对话框
            System.out.println("我说:" + reply);

            // 创建DatagramPacket对象,封装数据
            SocketAddress sa = dp.getSocketAddress();
            dpto = new DatagramPacket(reply.getBytes(),
                    reply.getBytes().length, sa);
            ds.send(dpto);
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭DatagramSocket对象
            ds.close();
        }
    }

}
接收端

 

posted @ 2018-05-30 22:17  小黄豆'  阅读(148)  评论(0编辑  收藏  举报