黑马程序员:初识socket编程(一)
来源:互联网 发布:淘宝版本过低怎么升级 编辑:程序博客网 时间:2024/06/13 22:27
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------
一、初识网络通讯:
1、首先,找到对方机器的IP地址;2、其次,每台机器上的每个应用程序,都有一个专用的端口号,数据传输时找到相应的端口,让相应的程序进行处理;
3、机器之间如果正常通讯,还需要一个共有的通讯协议:TCP/IP协议。
4、常用网络协议:
应用层协议:http、 ftp
传输层协议:tcp、udp
网际层协议:ip
二、网络通讯要素:
1、IP地址:(InetAddress)网络中设备的标识
2、端口号:用于标识进程的逻辑地址,不同进程的标识
有效端口:0--65535,其中0--1024使系统保留使用的端口
3、传输协议:通讯的规则,常见的:TCP、UDP
三、传输协议:UDP/TCP
(一)UDP (无连接、有大小限制、容易丢失数据、速度快)
1、将数据及源和目的封装成数据包中,不需要建立连接
2、每个数据包的大小限制在64k以内
3、因无连接,是不可靠协议
4、不需要连接,速度快
5、举例:网络视频会议、步话机
(二)TCP()
1、建立连接,形成传输数据的通道
2、在连接中进行大数据量传输
3、通过三次握手完成连接,是可靠协议(三次握手:请求——>回复请求——>再回复)
4、必须建立连接,效率较低
5、举例:打电话、下载
四、Socket(插座)
Socket是为网络服务提供的一种机制,通信两端都有Socket。
网络通信就是Socket间的通信,数据在两个Socket间通过IO进行传输。
(一)UDP:发送和接受
1、发送:不管接收方是否运行,都照样发送,如果有接收方正在运行,则接收方获得数据,否则数据丢失。
首先,建立socket服务。
DatagramSocket ds = new DatagramSocket() //建立socket服务,不指定端口,让系统随机分配
或 DatagramSocket ds = new DatagramSocket(10000) //建立socket服务,指定端口为10000
其次,得到数据,并将数据打包。
String str = new String("welcome"); //新建一个字符串
byte[] data = str.getBytes(); //将字符串转换成字节数组
InetAddress receiveIP = ds.getInetAddress().getByName("192.186.1.107");//指定接收方的IP地址
int port = 20000; //指定接收方应用程序的端口
DatagramPacket dp = new DatagramPacket(data,data.length.receiveIP,prot); //创建一个发送数据包
再次,上面一步,数据已经打包完毕,现在只需要使用DatagramSocket的send方法来完成发送即可
ds.send(dp); //使用send方法发送数据包。
最后,关闭数据资源。
ds.close();
2、接收:使用UDP传输协议传输数据是,接收方应该先于发送方而运行,否则将接收不到数据。
首先,与建立发送方类似,先建立socket服务。
/*
建立socket服务,不指定端口,让系统随机分配。
但是作为接收方,如果不指定端口的话,发送方将不知道发数据发送到哪个应用程序。
*/
DatagramSocket ds = new DatagramSocket() //所以作为接受方,这个对象是不能用的。
/*
那么,应该怎么建立接收方的socket服务呢,很简单,就是在建立socket服务时,
指定一个端口号,并且这个端口号,要与发送端所指定的目标端口号一致。
*/
DatagramSocket ds = new DatagramSocket(20000);//上面发送端指定的目标端口号为20000
其次,建立一个接受包,用于接收来自发送方的数据。
//先建一个字节数组,用于存储数据。
byte[] buf = new byte[1024];
//创建一个用来存储长度为buf.length的数据包
DatagramPacket dp = new DatagramPacket(buf,buf.length);
再次,使用socket的接收方法(receive),接收数据。
ds.receive(dp);
再次,将得到的数据进行处理。
//获取发送方的IP和端口号
String sendIP = dp.getAddress().getHostAddress();
int port = dp.getPort();
//获得数据
String data = new String(dp.getData(),0,dp.getLength());
最后,关闭资源。
ds.close();
---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
0 0
- 黑马程序员:初识socket编程(一)
- 黑马程序员学习日记----Socket编程(一)
- 黑马程序员-----初识OC(一)
- 黑马程序员---网络编程(socket编程)
- 黑马程序员---------关于socket编程
- 黑马程序员_java Socket编程
- 【黑马程序员】Socket 网络编程
- 黑马程序员--网络编程Socket
- 黑马程序员--网络编程Socket
- 黑马程序员-Socket网络编程
- 黑马程序员线程Socket编程
- 黑马程序员----JAVA Socket编程
- 黑马程序员(一)——初识java
- 黑马程序员----------Java网络编程(Socket编程)笔记
- 黑马程序员——网络编程(Socket编程)
- 黑马程序员——网络编程(Socket编程)下
- 黑马程序员_java 网络编程 初识
- 黑马程序员-网络编程(一)
- Android图像处理之Bitmap类
- Request.QueryString["**"]发生“未将对象引用设置到对象的实例。”的解决方法
- 多线程主线程接受返回结果
- 腾讯京东合作
- poj1477
- 黑马程序员:初识socket编程(一)
- Qt编写activex所遇到的问题
- 使用Markdown写文档
- Yt初试锋芒--题与分析
- 理解接口开发中的*Ptr
- 方法节点的使用
- 2.23学习心得 Matlab graythresh函数 形态学开闭操作,腐蚀膨胀的作用
- virtualBox启动虚拟机报“The VirtualBox kernel driver is not accessible to the current user”错误
- 微信“广点通”威力如何?