JavaIO基础(3)_网络IO、TCP\UDP模拟聊天

InetAddress

java.net包下提供的类

通过InetAddress可以获得本机一些网络信息

特点

  • 单例模式,全局一份
   
    InetAddress localHost = InetAddress.getLocalHost() ;
    System.out.println(localHost);
		//DESKTOP-AS6LJ9L/127.0.0.1


    String host = localHost.getHostAddress();
    System.out.println(host);
    //127.0.0.1

    String hostName = localHost.getHostName() ;
    System.out.println(hostName);
		//DESKTOP-AS6LJ9L

UDP通信互联聊天功能

服务端实现UDP接收数据

import sun.security.util.Length;

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

public class UdpServer {


    public static void main(String[] args) {
        //接收数据报的Socket
        DatagramSocket ds = null  ;
        
        try {
            //socket绑定端口
            ds = new DatagramSocket(10000) ;

          	//数据接收完以以二进制存储,我们无法读,在下面转化为字符串
            byte[] bs = new byte[1024];
 						
            //数据报对象
            DatagramPacket dp  = new DatagramPacket(bs,bs.length) ;
            
            while (true) {
                //阻塞接收10000端口号
                ds.receive(dp);
                //get ip
                InetAddress inetAddress = dp.getAddress();
                //获得数据
                byte[] data = dp.getData() ;
                //获得数据长度
                int len = dp.getLength() ;
                //数据转化为字符串
                String str = new String(data,0, len) ;
                System.out.println(inetAddress.getHostAddress()+"发送的数据是:"+str);

            }

客户端发送数据

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

public class UdpClient {

    public static void main(String[] args) {


        DatagramSocket ds = null ;

        BufferedReader reader = null ;

        try {
            ds = new DatagramSocket() ; //客户端socket
            //从系统输入读取
            reader = new BufferedReader(new InputStreamReader(System.in)) ;

            
            String line = null ;/*使用buffer读必备*/
            
						//死循环
            while ((line = reader.readLine()) != null){

                if ("exit".equals(line))
                    break;

                byte[] bs = line.getBytes() ;//以字节byte形式打包发出
                /*创建数据包
                * 参数一:字节数组
                * 参数二:数组长度
                * 参数三:发送到哪
                * 参数四:端口号
                * */
                DatagramPacket dp  = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),10000) ;
                ds.send(dp);
            }

TCP通信实现聊天功能

服务端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;

public class TcpServer {
    public static void main(String[] args) {
				//服务端socket
        ServerSocket ss = null ;
        //客户端socket
        Socket s = null  ;

      	
        BufferedReader reader =null ;
        try {
            //监听10000
            ss = new ServerSocket(10000) ;
						//阻塞接收
            s = ss.accept() ;

            InputStream in = s.getInputStream() ;
            while (true) {
                reader = new BufferedReader(new InputStreamReader(in));
								//
                String line = reader.readLine();

                if ("exit".equals(line)){
                    System.out.println("服务关闭");
                    break;}
              
 								//获取客户端信息
                InetAddress address = s.getInetAddress();
                String ip = address.getHostAddress();
                System.out.println(ip + "发送了:" + line);
            }



客户端:

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

public class TcpClient {
    public static void main(String[] args) {
				//客户端socket
        Socket s = null ;
				
        BufferedWriter writer = null ;
        BufferedReader reader = null ;

        try {
						//socket
            s = new Socket("127.0.0.1",10000) ;
            OutputStream out = s.getOutputStream()  ;
            writer = new BufferedWriter(new OutputStreamWriter(out)) ;
            //从控制台读取
            reader = new BufferedReader(new InputStreamReader(System.in)) ;
            String line = null ;

            while (true) {
                //读取控制台数据
                line = reader.readLine() ;
                //out
                writer.write(line);
                writer.newLine();
                writer.flush();
                if ("exit".equals(line)){
                    System.out.println("服务关闭");
                    break;
            }}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值