java网络编程

package inet;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * 网络编程:
 *          网络: 一组相互连接的计算机(使用物理线路进行连接)
 *      
 * 网络编程三要素:
 *          IP(ipconfig:查看本机ip):    
 *                  唯一标识网络的每一计算机(两台计算机通信必备要素)    ----》找到对方的位置
 *                          特殊的ip地址:127.0.0.1: 本机ip地址
 *                                  InetAddress 
 *          端口号:
 *                  每台计算机中不同应用程序的标号                             --》具体门牌号
 *                      端口的范围:  0-65535之间
 *                      端口号:0-1023    被系统占用
 *                          特殊端口号:
 *                                      1521:     ---》Oracle
 *                                      1433:        ---》sqlserver
 *                                      3306:        ---》mysql
 *                                      8080:        ---》Tomcat
 *          
 *          通信协议:通信的方式:
 *                      UDP协议:
 *                                      相当于发信息,不需要建立连接
 *                                      数据报包的大小限制64K内
 *                                      数据不安全,容易丢包
 *                      
 *                      TCP协议:
 *                                      相当于打电话,需要建立连接
 *                                      效率相对比较低,数据传输安全
 *                                      三次握手
 *              
 *                  Socket(套接字)与ServerSocket:
 *                                  网络上的两个程序通过一个双向通信连接实现数据的交换,这个连接的一端称为Socket,一端称为ServerSocket
 *
 */
public class Inet {
    public static void main(String[] args) throws UnknownHostException {
        //创建对象
        InetAddress ia = InetAddress.getLocalHost();
        System.out.println(ia);    //获取到主机名称和ip
        System.out.println("主机名称"+ia.getHostName());
        System.out.println("主机ip:"+ia.getHostAddress());

        //getByName();  //根据xx找到xx
        InetAddress iaa = InetAddress.getByName("Phoebe");      
        InetAddress iaaa = InetAddress.getByName("192.168.33.243");
        InetAddress iia = InetAddress.getByName("www.baidu.com");
        System.out.println("根据主机名称找IP地址:"+iaa.getHostAddress());  //找到返回IP地址,找不到异常
        System.out.println("根据IP地址找主机名称:"+iaaa.getHostName());     //找到返回主机名,找不到返回输入的ip
        System.out.println("通过网络域名找主机:"+iia.getHostAddress());      //有可能返回的主机ip有很多,只是显示了其中
    }
}
package udptest;

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 AskClient {
        public static void main(String[] args) throws IOException {
            //【1】创建一个接受发送数据的对象
            DatagramSocket ds = new DatagramSocket(8888);  //自己的端口号
            //【2】创建数据报包的对象,用于对发送的数据进行打包
            String str = "鸡腿你吃吗?";
            DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getLocalHost(), 7777);
            //【3】发送数据
            ds.send(dp);

                        //接收接收方的数据
                        byte [] buf = new byte[1024];
                        DatagramPacket dp2 = new DatagramPacket(buf, buf.length);
                        //接收
                        ds.receive(dp2);
                        System.out.println(new String(buf,0,dp.getLength()));

            //【4】关流
            ds.close();

        }
}   

package udptest;

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

/**
 * 接受方:
 *
 */
public class AskServer {
        public static void main(String[] args) throws IOException {
            //【1】创建对象
            DatagramSocket   ds = new DatagramSocket(7777);
            //【2】创建数据包
            byte [] buf = new byte[1024];
            DatagramPacket dp = new DatagramPacket(buf, buf.length);
            //【3】接收
            ds.receive(dp);
            System.out.println(new String(buf,0,dp.getLength()));

                        //回复
                    String str = "不吃,有毒";
                    DatagramPacket dp2 = new DatagramPacket(str.getBytes(), str.getBytes().length,dp.getAddress() , 8888);
                    //【3】发送数据
                    ds.send(dp2);
                    //关闭
                    ds.close();


            //【4】关闭
            ds.close();

        }
}

这里写图片描述

package tcptest;

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

/**
 * 客户端:
 *              注意事项:
 *                      启动有先后,先启动服务器,再启动客户端
 *                      启动之后,客户端与服务器平级,谁发送数据都可以
 *
 */
public class NetClient {
    public static void main(String[] args) throws UnknownHostException, IOException {
        //【1】创建一个Socket对象        --》服务器的IP,服务器监听的端口
        Socket client  = new Socket("localhost", 6666);
        //【2】准备向服务器发送数据      ---》获取输出流
        OutputStream os=client.getOutputStream();     //使用Socket的输出流
        String str="你好呀";
        os.write(str.getBytes());   //将字符串转成byte类型的数组
        //【3】发送完毕
        client.shutdownOutput();   

                    //接收来自服务器的回复
                    InputStream is = client.getInputStream();
                    byte [] buf = new byte[1024];
                    int len = is.read(buf);   
                    System.out.println("服务器回复说:"+new String(buf,0,len));
                    //关闭
                    is.close();


        //【4】关流
        os.close();
        client.close();
    }
}
package tcptest;

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

/**
 * 服务器:
 *
 */
public class NetServer {
        public static void main(String[] args) throws IOException {
            //【1】创建对象      -----》写一个监听的端口号(与客户端端口相同)
            ServerSocket server = new ServerSocket(6666);
            //【2】获取客户端的Socket对象
            Socket client=server.accept();     //用于获取客户端的对象,如果一直没有客户端与之链接的话,处于阻塞状态(没资格)有客户端来链接的时候进入就绪状态,等待cpu的调度
            //【3】获取客户端发送来的数据   ---》输入流
            InputStream is = client.getInputStream();
            byte [] buf = new byte[1024];
            int len =is.read(buf);
            String str = new String(buf, 0, len);
            client.shutdownInput();//接收完毕
            //【4】输出客户端发来的信息
            System.out.println("收到:客户端的IP为+"+client.getInetAddress()+"发送的消息为:+"+str);

                            //回复客户端    -->获取当前客户端的输出流,目的是回复数据
                            OutputStream os = client.getOutputStream();
                            //回复  字节
                            os.write("大家好才是真的好--- 广州好迪".getBytes());     
                            client.shutdownOutput();
                            //关闭
                            os.close();

            //【5】关闭
            is.close();
            client.close();
            server.close();   //可选  
        }
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值