初学——网络编程

一、iP

  1.Ip地址

  IP地址有唯一的网络上的每一台地计算机,ip地址有死歌八位二进制组成.每个字段不能超过255

  IP地址=网络地址(表示计算机或者网络设备所在的万股单)+主机地址(表示特定主机或网络设备)

  查看主机的IP地址在cmd中输入config查看与目标主机测试网络是否同畅用ping +目标IP主机

  2.Dns域名解析

   网络服务器通常指较高的计算能力,能够听用户服务功能的计算,网络服务器可分为(邮件服务器和web服务器) .

  3.网络通信协议

    为了在网络中不同的计算机之间进行通信而建立的规则、标准或约定的集合

    应用层:HTTP(网络协议) FTP(文件协议) TFTP SMTP SNMP DNS

    传输层: TCP UDP

    网络层:ICMP IGMP IP ARP RARP

    数据链路层:

    物理层:由底层网络第一的协议

二、Socke

    Socket的底层机制复杂,Java平台提供了一些简单的API,可以更简单有效的使用Socket开发而无需了解底层机制。通信链路的端点就被称为“套接字”(英文名Socket) 是提供给应用程序的接口

  1.socket的分类

    流是套接字:面向连接提供可靠的数据传输服务

    数据报是套接字:无连接服务更加高效率

   2. Socket的传输字符流

  创建server类

package dome1;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

//服务器端
public class Service {
    public static void main(String[] args) throws Exception {
        /*
         * 接受客户端请求
         */
        //创建一个服务器的socket
        ServerSocket serverSocket=new ServerSocket(50001);
        //使用accept方法监听service的链接
        Socket socket = serverSocket.accept();
        //通过输入流获得用户请求
        InputStream is=socket.getInputStream();
        BufferedReader br=new BufferedReader(new InputStreamReader(is));
        String str;
        while ((str=br.readLine())!=null) {
        
            System.out.println("客户端说:"+str);
            
        }
        /*
         * 给客户端相应
         */
        OutputStream os=socket.getOutputStream();
        BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(os));
        String hui="欢迎你";
        bw.write(hui);
        
        //关闭流
        br.close();
        is.close();
        socket.close();
        serverSocket.close();
    }
}

创建客户端输出

package dome1;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
public static void main(String[] args) throws Exception {
    Socket socket=new Socket("localhost", 50001);
    String info="用户名:tom;密码:123";
    OutputStream os=socket.getOutputStream();
    byte [] b=info.getBytes();
    //接受服务器的相应
    socket.shutdownOutput();
    InputStream is=socket.getInputStream();
    BufferedReader br=new BufferedReader(new InputStreamReader(is));
    String re;
    os.write(b);
    os.close();
    socket.close();
    
}
}

  3.Socket基于多线程传输对象

 创建User类并且封装

package dome3;

import java.io.Serializable;

public class User implements Serializable{
    private String name;
    private String pwd;
    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;
    }
    public User() {
        super();
    }
    
}

创建客户端一

  

package dome3;

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

public class UserClient1 {
public static void main(String[] args) {
    try {
        //链接端口
        Socket socket=new Socket("localhost",50002);
        //实例化对象
        User user=new User("王五", "123");
        //封装对象
        ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
        //传输对象
        oos.writeObject(user);
        //关闭流
        oos.close();
        socket.close();    
        //捕获异常
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

创建客户端二

package dome3;

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

public class UserClient2 {
public static void main(String[] args) {
    try {
        //链接端口
        Socket socket=new Socket("localhost",50002);
        //实例化对象
        User user=new User("李四", "123");
        //封装对象
        ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
        //传输对象
        oos.writeObject(user);
        //关闭流
        oos.close();
        socket.close();    
        //捕获异常
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

创建线程类

package dome3;

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

public class UserThread extends Thread {
    private Socket socket;

    public UserThread(Socket socket) {
            this.socket=socket;
    }
    public void run() {
        //创建对象的传输流
        try {
            ObjectInputStream ois;
            ois = new ObjectInputStream(socket.getInputStream());
        
        //将受到的流转换成对象
        User user2;
    
            user2 = (User)ois.readObject();
            System.out.println("客户端说:"+user2.getName()+user2.getPwd());
        
        //关闭流

            socket.close();
            ois.close();
        socket.close();
         } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

创建服务器类

package dome3;

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

import com.sun.corba.se.spi.orbutil.fsm.InputImpl;

public class UserService {
    public static void main(String[] args) throws Exception {
        //创建ServerSocket的对象
        ServerSocket serverSocket=new ServerSocket(50002);
        //监听与服务类的链接
        while (true) {
            Socket socket=serverSocket.accept();
            //创建线程与每个客户端相应
        UserThread userThread=new UserThread(socket);
        userThread.start();
        }
    
        
    }
}

运行结果:

 

posted @ 2019-06-18 17:27  Sprio丨往昔  阅读(159)  评论(0编辑  收藏  举报