现在的位置: 首页 > 综合 > 正文

黑马程序员网络编程

2013年10月04日 ⁄ 综合 ⁄ 共 1919字 ⁄ 字号 评论关闭

一、网络模型概述
OSI:Open System InterConnection,开放系统互联模型,分七层,每一层
都有一个明确的功能,分工明确,但是过于麻烦,于是出现了TCP/IP协议

TCP/IP模型:由于OSI模型过于麻烦所以出现了该种模型

二、TCP和UDP

UDP:数据报文协议,它是将数据封装到数据包里面,然后将数据包扔给对方,
    对讲机就是UDP协议,QQ聊天也是UDP协议,该协议用于发送端和接收端之间数据的传输
    >不需要建立连接
    >每个数据包的大小限制在64K内
    >因无连接,是不可靠的协议
    >不需要建立连接,速度快

TCP:传输控制协议,打电话就是这种情况,只有电话接通了我才能跟对方说话,该协议用于客户端和服务端之间的数据传输
    >建立连接,形成传输数据的通道。
    >在链接中进行大数据量的传输
    >通过三次握手完成连接,是可靠的协议

    >必须建立连接,效率会稍低

以下是一个UDP协议的简单聊天程序

package cn.itheima.web;

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

/**
 * 聊天程序发送端
 * */
public class Send implements Runnable {
	// 创建UDP Socket服务
	private DatagramSocket ds;
	
	public Send(DatagramSocket ds){
		this.ds = ds;
	}

	public void run() {
		// 获取键盘输入
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		try {
			String msg = null;
			while ((msg = br.readLine()) != null) {
				if (msg.equals("88")) {
					break;
				}
				// 创建包,接收数据
				DatagramPacket dp = new DatagramPacket(msg.getBytes(), 0, 
						msg.length(), InetAddress.getByName("127.0.0.1"), 10000);
				// 发送数据
				ds.send(dp);
				// 关闭资源
			}
			ds.close();  
			br.close();
		} catch (Exception e) {
			System.out.println("出异常啦:" + e.getMessage());
		}
	}
}

package cn.itheima.web;

import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 聊天程序接收端
 * */
public class Rece implements Runnable{

	//接收者socket
	private DatagramSocket ds;
	
	public Rece(DatagramSocket ds){
		this.ds = ds;
	}
	
	public void run(){
		//缓冲区
		byte[] b = new byte[1024];
		while(true){
			try{
				//数据包,接收客户端发来的数据
				DatagramPacket dp = new DatagramPacket(b,b.length);
				//接收数据
				ds.receive(dp);
				//将数据转换为字符串
				String msg = new String(dp.getData(),0,dp.getLength());
				System.out.println(msg);
			}catch(Exception e){
				System.out.println("接收程序出错啦:"+e.getMessage());
			}
		}
	}
}

package cn.itheima.web;

import java.net.DatagramSocket;

public class ChatDemo {

	/**
	 * 测试聊天程序
	 */
	public static void main(String[] args) throws Exception{
		DatagramSocket send = new DatagramSocket();
		DatagramSocket rece = new DatagramSocket(10000);
		
		Send s = new Send(send);
		Rece r = new Rece(rece);
		
		new Thread(r).start();
		new Thread(s).start();
	}

}

抱歉!评论已关闭.