黑马程序员--Java基础总结---网络编程



---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

网络通讯要素:Ip地址:(InetAddress)网络中设备的标示。本地回环地址127.0.0.1 主机名:localhost

 端口号:用于标示进程的逻辑地址,不同进程的标识。有效端口0-65535 0-1024系统使用或保留端口
 传输协议:通讯规则 tcp Udp
udp:将数据及源和目的封装成数据包中,不需要建立连接,每个数据包的大小限制在64K内,因无连接,是不可靠协议,不需要建立连接,速度快。
tcp:建立连接,形成传输数据通道,在连接中进行大数据量传输,通过三次握手建立连接,是可靠协议。必须建立连接,效率低。
Socket:Socket就是网络服务提供的一种机制。通信两端都有Socket。网络通信其实就是Socket间的通信。数据在两个Socket间通过IO传输。
Udp传输:DatagramSocket与DatagramPacket 建立发送端和接收端,建立数据包,调用Socket的发送接收方法。关闭Socket。
Tcp传输:Socket和ServerSocket 建立客户端和服务端 建立连接后,通过Socket中的IO流进行数据传输。关闭Socket。

因为Tcp是面向连接的。所以建立Socket服务时,就要有服务端存在,并连接成功。形成通路后,在此传输数据。

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

/*
 *编写一个聊天程序。有接受数据,有发送数据。
 *两部分同时执行,使用多线程技术。一个控制发,一个控制收。
 * 
 * */
class Send implements Runnable{//创建Send方法实现Runnable接口。
		private DatagramSocket ds;
		public Send(DatagramSocket ds){
			this.ds=ds;
		}
		public void run(){//覆写run方法。
			try{
				BufferedReader bufr =new BufferedReader(new InputStreamReader(System.in));//键盘接收数据。
				String line=null;
				while((line=bufr.readLine())!=null){
					if("886".equals(line))
						break;
					byte[] buf=new byte[1023];
					//将数据封装到数据包。
					DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10005);
					ds.send(dp);
				}	
			}			
			catch ( Exception e){//处理异常。
				throw new RuntimeException("发生失败");
			}
			
		}
}
class Rece implements Runnable{//实现接收方法,实现Runnable 接口。
	private DatagramSocket ds;
	public  Rece(DatagramSocket ds){
		this.ds=ds;
	}
	public void run(){
		try{
			while(true){// 循环接收数据
				byte[] buf=new byte[1023];
				DatagramPacket dp=new DatagramPacket(buf,buf.length);//封装到数据包
				
				ds.receive(dp);
				String ip =dp.getAddress().getHostAddress();
				String data=new String(dp.getData(),0,dp.getLength());
				System.out.println(ip+"::"+data);
			}
				
		}
	
		catch ( Exception e){
			throw new RuntimeException("接收失败");
		}
	}
}

public class ChatDemo {
	public static void main(String [] args) throws SocketException{
		DatagramSocket sendSocket=new DatagramSocket();//建立socket服务。
		DatagramSocket receSocket=new DatagramSocket(10005);
		
		new Thread(new Send(sendSocket)).start();//建立线程。
		new Thread(new Rece(receSocket)).start();
		
	}
	

}




---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值