黑马程序员_网络编程(1)
2014-10-28 15:49
323 查看
------- android培训、java培训、期待与您交流! ----------
/*
|-java.net
|-InetAddress
|-getByName(String host) 给定主机名 IP 地址。
|-getHostName() 返回IP地址主机
|-getLocalHost()返回本地主机
|-getHostAddress() 返回IP地址字符串
|-hashCode() 返回IP地址哈希码
|-toString() 将IP 地址转换为 String。返回主机名/字面值 IP 地址
|-DatagramSocket
|-receive(DatagramPacket p) 接收数据包
|-send(DatagramPacket p) 发送数据包
|-getInetAddress()
|-getLocalAddress()
|-getPort()
|-DatagramPacket
|-getAddress() 返回某台机器IP地址。
|-getData() 返回数据缓冲区。
|-getLength() 返回数据长度
|-getPort() 返回主机端口
|-Socket
|-getInputStream() 获取socket流中的输入流
|-getOutputStream() 获取socket流中的输出流
|-ServerSocket
|-accept() 获取连接的客户端对象
*/
1).网络参考模型:
OSI参考模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
TCP/IP参考模型:应用层、传输层、网际层、主机至网络层。
应用层:http ftp
传输层:TCP UDP
网际层:IP
2).网络通讯三要素:IP地址、端口号、传输协议
IP地址:InetAddress
网络中设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:localhost
端口号
用于标识进程的逻辑地址,不同进程的标识
有效端口:0~65535,其中0~1024系统使用或保留端口。
备注:不是所谓的物理端口!
传输协议
通讯的规则
常见协议:TCP,UDP
3).Socket
1.就是为网络服务提供的一种机制
2.通信两端都有Socket
3.网络通信就是Socket间的通信。
4.数据在两个Socket间通过IO传输。
====================
4).UDP传输:
1 面向无边连接:将数据包和目的封装成数据包中,不需要建立连接.
2 将数据封包:每个数据包的大小在64k内.
3 不可靠协议:因为无连接.
4 速度快:不需要建立连接.
例:对讲机就是UDP的,面向无连接(不管发送的数据对方是否接收)
UDP传输用到DatagramSocket,它具备发送和接受功能,
在进行udp传输时,需要明确一个是发送端,一个是接收端。
UDP的发送和接收:
接收端创建UDP的Socket服务。将数据封装成包。发送出去。
接收端创建UDP的Socket服务。接收数据包。得到信息。
5).例:编写一个聊天程序。
1.有收数据的部分,和发数据的部分。
2.这两部分需要同时执行。要用到多线程技术
3.一个线程控制收,一个线程控制发。
4.收和发动作是不一致的,定义两个run方法,封装到不同的类中
import java.io.*;
import java.net.*;
class Send implements Runnable {
private DatagramSocket ds;//创建Udp的Socket服务引用
public Send(DatagramSocket ds) {//接收DatagramSocket对象
this.ds = ds;
}
public void run() {//覆写run方法。
try {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//获取键盘录入的数据,封装成包。发送出去
String line = null;
while ((line = bufr.readLine()) != null) {
byte[] buf = line.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.255"), 10002);
ds.send(dp);
if ("886".equals(line))
break;
}
} catch (Exception e) {
throw new RuntimeException("发送端失败");
}
}
}
class Rece implements Runnable {
private DatagramSocket ds;
public Rece(DatagramSocket ds) {//接收DatagramSocket对象
this.ds = ds;
}
public void run() {
try {
while (true) {//一直建立连接。
//创建数组用来存储数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//receive方法接收数据存到数据包中
ds.receive(dp);
//获取数据包中数据
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
if ("886".equals(data)) {
System.out.println(ip + ",离开聊天室");
break;
}
System.out.println(ip + ": " + data);
}
} catch (Exception e) {
throw new RuntimeException("接收端失败");
}
}
}
public class ChatDemo {
public static void main(String[] args) throws Exception {
DatagramSocket sendSocket = new DatagramSocket();//创建Udp的Socket服务
DatagramSocket receSocket = new DatagramSocket(10002);//创建Udp的Socket服务,监听10002端口
new Thread(new Send(sendSocket)).start();//启动线程,运行run方法
new Thread(new Rece(receSocket)).start();
}
}
/*
|-java.net
|-InetAddress
|-getByName(String host) 给定主机名 IP 地址。
|-getHostName() 返回IP地址主机
|-getLocalHost()返回本地主机
|-getHostAddress() 返回IP地址字符串
|-hashCode() 返回IP地址哈希码
|-toString() 将IP 地址转换为 String。返回主机名/字面值 IP 地址
|-DatagramSocket
|-receive(DatagramPacket p) 接收数据包
|-send(DatagramPacket p) 发送数据包
|-getInetAddress()
|-getLocalAddress()
|-getPort()
|-DatagramPacket
|-getAddress() 返回某台机器IP地址。
|-getData() 返回数据缓冲区。
|-getLength() 返回数据长度
|-getPort() 返回主机端口
|-Socket
|-getInputStream() 获取socket流中的输入流
|-getOutputStream() 获取socket流中的输出流
|-ServerSocket
|-accept() 获取连接的客户端对象
*/
1).网络参考模型:
OSI参考模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
TCP/IP参考模型:应用层、传输层、网际层、主机至网络层。
应用层:http ftp
传输层:TCP UDP
网际层:IP
2).网络通讯三要素:IP地址、端口号、传输协议
IP地址:InetAddress
网络中设备的标识
不易记忆,可用主机名
本地回环地址:127.0.0.1 主机名:localhost
端口号
用于标识进程的逻辑地址,不同进程的标识
有效端口:0~65535,其中0~1024系统使用或保留端口。
备注:不是所谓的物理端口!
传输协议
通讯的规则
常见协议:TCP,UDP
//返回本地主机对象 InetAddress i = InetAddress.getLocalHost(); System.out.println("name/address:"+i.toString()); System.out.println("name:"+i.getHostName());//返回IP地址的主机 System.out.println("address:"+i.getHostAddress());//返回IP地址 InetAddress ia = InetAddress.getByName("127.0.0.1"); System.out.println("name:"+ia.getHostName()); System.out.println("address:"+ia.getHostAddress());
3).Socket
1.就是为网络服务提供的一种机制
2.通信两端都有Socket
3.网络通信就是Socket间的通信。
4.数据在两个Socket间通过IO传输。
====================
4).UDP传输:
1 面向无边连接:将数据包和目的封装成数据包中,不需要建立连接.
2 将数据封包:每个数据包的大小在64k内.
3 不可靠协议:因为无连接.
4 速度快:不需要建立连接.
例:对讲机就是UDP的,面向无连接(不管发送的数据对方是否接收)
UDP传输用到DatagramSocket,它具备发送和接受功能,
在进行udp传输时,需要明确一个是发送端,一个是接收端。
UDP的发送和接收:
接收端创建UDP的Socket服务。将数据封装成包。发送出去。
接收端创建UDP的Socket服务。接收数据包。得到信息。
import java.net.*; class Send{ public static void main(String[] args) throws Exception{ //建立服务。设置发送端口是6666.不设置系统会自动添加一个 DatagramSocket ds = new DatagramSocket(6666); //要发送的数据getBytes()转换到byte[]中 String str = "啼笑皆非"; byte[] buf = str.getBytes(); //将数据封包。(数组,长度,广播地址,接收端口) //xxx.xxx.xxx.255 这个段里的广播地址,xxx.xxx.xxx.0 一个网络地址,网络段 DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.255"),8888); //ds中send方法发送包 ds.send(dp); //关闭资源; ds.close(); } } class Rece{ public static void main(String[] args) throws Exception{ //建立服务。设置指定的接收端口8888 DatagramSocket ds = new DatagramSocket(8888); //定义数据包存储数据。(数组,长度) byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf,buf.length); //ds中receive接收数据存储到包中 ds.receive(dp); //ps:发送端发送的数据及它的ip信息都存储到了dp中了 //接收到的数据,封装字符串。(getData(),0,getLength()) String data = new String(dp.getData(),0,dp.getLength()); //获取发送端主机名:getAddress().getHostName() //获取发送端ip及主机名:getAddress().getLocalHost().toString() String sendIp = dp.getAddress().getHostName(); //获取发送端的端口。 int sendPort = dp.getPort(); //打印接收数据的地址及内容 System.out.println(sendIp+": "+data+","+sendPort); //关闭资源 ds.close(); } }
5).例:编写一个聊天程序。
1.有收数据的部分,和发数据的部分。
2.这两部分需要同时执行。要用到多线程技术
3.一个线程控制收,一个线程控制发。
4.收和发动作是不一致的,定义两个run方法,封装到不同的类中
import java.io.*;
import java.net.*;
class Send implements Runnable {
private DatagramSocket ds;//创建Udp的Socket服务引用
public Send(DatagramSocket ds) {//接收DatagramSocket对象
this.ds = ds;
}
public void run() {//覆写run方法。
try {
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
//获取键盘录入的数据,封装成包。发送出去
String line = null;
while ((line = bufr.readLine()) != null) {
byte[] buf = line.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length,InetAddress.getByName("192.168.1.255"), 10002);
ds.send(dp);
if ("886".equals(line))
break;
}
} catch (Exception e) {
throw new RuntimeException("发送端失败");
}
}
}
class Rece implements Runnable {
private DatagramSocket ds;
public Rece(DatagramSocket ds) {//接收DatagramSocket对象
this.ds = ds;
}
public void run() {
try {
while (true) {//一直建立连接。
//创建数组用来存储数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//receive方法接收数据存到数据包中
ds.receive(dp);
//获取数据包中数据
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
if ("886".equals(data)) {
System.out.println(ip + ",离开聊天室");
break;
}
System.out.println(ip + ": " + data);
}
} catch (Exception e) {
throw new RuntimeException("接收端失败");
}
}
}
public class ChatDemo {
public static void main(String[] args) throws Exception {
DatagramSocket sendSocket = new DatagramSocket();//创建Udp的Socket服务
DatagramSocket receSocket = new DatagramSocket(10002);//创建Udp的Socket服务,监听10002端口
new Thread(new Send(sendSocket)).start();//启动线程,运行run方法
new Thread(new Rece(receSocket)).start();
}
}
相关文章推荐
- 黑马程序员_java基础网络编程
- 黑马程序员_网络编程
- 黑马程序员_网络编程
- 黑马程序员_java中的网络编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- 黑马程序员——黑马学习日志之十七 网络编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- 【黑马程序员】黑马入学准备篇:网络编程之 URL和URLConnection
- 程序员自学之旅(六)网络编程入门
- 黑马课程中iOS网络编程服务器搭建以及源码
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- 黑马程序员_GUI编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程
- 黑 4000 马程序员_JAVA_网络编程
- 黑马程序员:Java基础总结----GUI&网络&IO综合开发
- 【黑马程序员】黑马入学准备篇:网络编程之 基本概述
- Java程序员从笨鸟到菜鸟之(十三)java网络通信编程