黑马程序员_学员周峰_java高级_网络编程

----------------------android培训java培训、期待与您交流! ----------------------

 

网络编程就是指控制Socket,Socket是为网络服务提供的一种机制

以下两种协议的理解:


UDP , 面向无连接。 不需要连接。  发包有限制 一次不能超过64k  不可靠的协议,但是速度快!与聊天、对讲机原理类似

TCP  面向连接。需要连接。不需要封包。要通过3次握手确认,可靠连接,但是效率低一点! 与下载、打电话类似类似


笔记:



TCP创建就形成通道,客户端的in指向服务端的out,服务端的out反正也指向客户端的in。

TCP服务器与客户端都等待时需要考虑是否添加了结束标记





UDP步奏为

 1.建立端点
 2.提供数据。
 3.发生数据包
 4.关闭资源


代码演示:


package com.zhoufeng.socket;

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

public class UDPDemo {

	/**
	 * @param args
	 * 1.建立端点
	 * 2.提供数据。
	 * 3.发生数据包
	 * 4.关闭资源
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//1 创建UDP服务
		DatagramSocket ds = new DatagramSocket(8888);

		
		//2 封包!
		byte[] buf = "你好!".getBytes();
		DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.255"),10000);
		
		//3 发包
		
		ds.send(dp);
		
		//4 关闭资源
		ds.close();

	}

}




定义一个客户端接收


代码演示:


package com.zhoufeng.socket;

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

public class UDPReceDemo {

	/**
	 * 定义一个客户端,接收UDP数据
	 * 1  定义UDP服务,监听一个端口
	 * 2 定义一个数据包,用来存取接收到的数据包
	 * 3通过Receive方法存入
	 * 4 取出数据打印
	 * 5 关闭资源
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//定义协议
		DatagramSocket ds = new DatagramSocket(10000);
		
		while(true)
		{
			
		
		//定义数据包存数据
		byte[] buf = new byte[1024];
		DatagramPacket dp = new DatagramPacket(buf, buf.length);
		
		//通过服务Receive存入
		ds.receive(dp);
		
		InetAddress ip = dp.getAddress();
		
		//拿数据
		String date = new String(dp.getData(),0,dp.getLength());
		
		int port = dp.getPort();
		
		System.out.println("收到" + ip.getHostAddress() + "接收端口:" + port + "消息:" + date);

		}
	}

}


 TCP演示代码:


这里是服务端

package com.zhoufeng.tcp;

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

/**
 * 定义断点接收
 * @author Administrator
 * 1.建立服务
 * 2.获取合客户端的对象
 * 3.收到数据然后读取
 * 
 */
public class TcpSevar {
	public static void main(String[] args) throws IOException {
		ServerSocket ss = new ServerSocket(10001);
		Socket s = ss.accept();//拿到客户端对象
		
		InputStream in = s.getInputStream();
		
		byte[] buf = new byte[1024];
		int len = in.read(buf);
		System.out.println(new String(buf,0,len));
		s.close();
	}
}


 这里是客户端:


package com.zhoufeng.tcp;

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


public class Tcpkehuduan {
	/**
	 * TCP分客户端和服务端
	 * 客户端:Socket
	 * 服务端:SeverSocket
	 * 步奏:
	 * 1.创建服务,连接主机和端口
	 * 2.
	 * @param args
	 * @throws IOException 
	 * @throws UnknownHostException 
	 */
	public static void main(String[] args) throws UnknownHostException, IOException  {
		
		//客户端
		Socket kehu = new Socket("192.168.1.101",10001);
		OutputStream out = kehu.getOutputStream();
		out.write("asdasdasd".getBytes());
		kehu.close();
		
		
	}

}


 

---------------------- android培训java培训、期待与您交流! ----------------------

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值