黑马程序员 Java基础 网络编程

对于网络,java提供了丰富的API,可以很方便的访问互联网上的HTTP服务,可以直接取得网络上的资源,因为java最初就是作为一门网络编程语言出现的。不过要学习java编程,需要先了解一些概念。

一、网络基本概念

1、IP地址

IP地址是用来标识计算机等网络设备的网络地址,由4个8位的二进制组成,中间有小数点分隔。

2、主机名

网络地址的助记名,按域名分级管理。

3、端口号

网络通信时,同一机器上的不同进程标识,其中0-1023是公认端口号。1024-65535是没有公共定义的端口号。

4、服务类型

网络存在各种服务,如HTTP,Telnet、FTP、SMtp。服务类型是应用层上的概念。

5、TCP/IP协议

它实际是一组协议,包括了上百个各种功能的协议,TCP/IP是一个可靠的、需要连接的,但传输效率较慢,TCP里存在一个UDP协议,它不需要连接,但传输效率高。

二、java网路编程API


1、InetAddress类

它是IP地址的封装类,它没有构造方法,但它提供了一些静态方法来返回它的对象。

public class InetTest {

	public static void main(String[] args) throws Exception{
		
		//获取本机IP地址  
        InetAddress ia = InetAddress.getLocalHost();  
        System.out.println(ia.toString());  
  
        //通过新浪主机名获取其IP地址  
        InetAddress i = InetAddress.getByName(); 
        System.out.println("name:" + i.getHostName());  
        System.out.println("address:" + i.getHostAddress());
	}

}
2、DatagramSocket和DatagramPacket

它们是利用UDP协议传输数据包的。

public class Udp {
	public static void main(String[] args) throws Exception{
		
		DatagramSocket ds=new DatagramSocket();
		DatagramSocket dk=new DatagramSocket(10005);
		new Thread(new TalkSend(ds)).start();
		new Thread(new TalkRece(dk)).start();
	}
	

}

class TalkSend implements Runnable{
	
	private DatagramSocket ds=null;
	
	TalkSend(DatagramSocket ds){
		
		this.ds=ds;
	}
	
	public void run(){
		
			try {
				BufferedReader bfd = new BufferedReader(new InputStreamReader(
						System.in));
				
				String str;
				while ((str = bfd.readLine()) != null) {
					byte[] by=str.getBytes();
					DatagramPacket dp = new DatagramPacket(by, by.length,
							InetAddress.getLocalHost(), 10005);
					ds.send(dp);

				}
			} catch (Exception e) {
				// TODO: handle exception
			}
			ds.close();
			
		
	}
}

class TalkRece implements Runnable{
	
	private DatagramSocket ds=null;
	TalkRece(DatagramSocket ds){
		
		this.ds=ds;
	}
	public void run(){
		
		try {
			while(true){
			byte[] bt = new byte[1024];
			DatagramPacket dp = new DatagramPacket(bt, bt.length);
			ds.receive(dp);
			System.out.println(dp.getAddress());
			System.out
					.println(new String(dp.getData(), 0, dp.getData().length));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		
	}
这是Datagram的典型应用,用UDP协议来建立的一个对话小程序,端口的问题需要注意。

3、ServerSocket和Socket

Socket是基于TCP/IP进行通讯的,它是连接的,可靠的,通过Socket,可以很容易实现计算机之间的通讯。

Socket是客户端,它里面封装了输入输出流,可是实现计算机之间的数据交流,而ServerSocket它可以接受Socket,并利用Socket里面的输入输出流来进行计算机之间的通讯。下面就是一个如何构建客户端和服务端的例子。


//客户端  
class TransClient  
{  
    public static void main(String[] args) throws Exception  
    {  
        //创建Socket服务  
        Socket s = new Socket("192.168.1.103",10009);  
        //定义读取键盘数据的流对象  
        BufferedReader bufr =  
            new BufferedReader(new InputStreamReader(System.in));  
        //定义目的,将数据写入到socket输出流,发送服务端  
        //BufferedWriter bufOut =   
        //  new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));  
        PrintWriter out = new PrintWriter(s.getOutputStream(),true);  
        //定义一个socket读取流,读取服务端返回的信息,数据  
        BufferedReader bufIn =   
            new BufferedReader(new InputStreamReader(s.getInputStream()));  
  
        String line = null;  
        while((line=bufr.readLine())!=null)  
        {  
            if("over".equals(line))  
                break;  
            out.println(line);  
            //bufOut.write(line);  
            //bufOut.newLine();  
            //bufOut.flush();  
  
            String str = bufIn.readLine();  
            System.out.println("Server:" + str);  
        }  
        bufr.close();  
        s.close();  
    }  
}  

import java.io.*;  
import java.net.*;  
  
//服务端  
class TransSever  
{  
    public static void main(String[] args) throws Exception  
    {  
        ServerSocket ss = new ServerSocket(10009);  
        Socket s = ss.accept();  
          
        String ip = s.getInetAddress().getHostAddress();  
        System.out.println(ip+"....connected");  
  
        BufferedReader bufIn =  
            new BufferedReader(new InputStreamReader(s.getInputStream()));  
        //BufferedWriter bufOut =  
        //  new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));  
        PrintWriter out = new PrintWriter(s.getOutputStream(),true);  
        String line = null;  
        while((line=bufIn.readLine())!=null)  
        {  
            System.out.println(line);  
            out.println(line.toUpperCase());  
            //bufOut.write(line.toUpperCase());  
            //bufOut.newLine();  
            //bufOut.flush();  
        }  
        s.close();  
        ss.close();  
    }  
}  


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值