网络编程
来源:互联网 发布:莫言丑化中国知乎 编辑:程序博客网 时间:2024/06/15 03:48
------- android培训、java培训、期待与您交流! ----------
网络通讯要素
网络通讯要素是:IP地址、端口号、传输协议。
1、IP地址
IP地址是网络中设备的标识,不易记忆,可用主机名。本地回环地址:127.0.0.1,主机名:localhost。
InetAddress类:
InetAddress i = InetAddress.getLocalHost();//调用对象
System.out.println(i); //得到IP地址的主机名+IP地址字符串
System.out.println(i.getHostName()); //得到IP地址的主机名
System.out.println(i.getHostAddress()); //得到IP地址字符串
拿任意一台主机的IP地址:
InetAddress ia = InetAddress.getByName("www.baidu.com") ; //也可以写的是IP地址
System.out.println(ia.getHostName());
System.out.println(ia.getHostAddress());
InetAddress[] ib = InetAddress.getAllByName("www.google.com"); //返回IP地址组成的数组,说明有多台主机服务器
for(InetAddress is:ib)
{
System.out.println(is.getHostAddress());
}
2、端口号
端口号用于标识进程的逻辑地址,不同进程的标识。
有效端口号:0~65535,其中0~1024是系统使用或保留端口,尽量不要使用。
3、传输协议
传输协议,即通讯的规则。常见协议有:UDP和TCP。
TCP(Transmission Control Protocol,传输控制协议):是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接,
形成传输数据的通道。一个TCP连接必须要经过三次“对话”才能建立起来,是可靠 协议。在连接中可以进行大数据量的传输,同
时因为要建立连接,所以效率会稍低。
UDP(User Data Protocol,用户数据报协议):是与TCP相对应的协议,它是面向非连接的协议,它不与对方建立连接,而是
将数据及源和目的封装成数据包发送过去。
UDP适用于一次只传送少量数据(64K)、对可靠性要求不高的应用环境,它的可靠性不如TCP协议高。例如:QQ就使用UDP发消息,因此有时会出现收不到消息的情况。因为不需要建立连接,所以速度快。
总结:TCP是基于连接的协议,是可靠协议,而UDP是面向非连接的协议,是不可靠协议;
TCP课进行大数据量传输,UDP的传输数据量有限,但可以将大数据切割封装成小数据包发送;
TCP传输效率低速度慢,UDP传输效率高速度快。
Socket(套接字)
Socket就是为网络服务提供的一种机制,通信两端都有Socket。网络通信其实Socket间的通信,数据在两个Socket间通过IO传输。
UDP传输(UDP的Socket服务):
DatagramSocket类 : void send(DatagramPacket p) 发送数据包
void receive(DatagramPacket p) 接受数据包
DatagramPacket 数据包类,
常用构造方法:DatagramPacket(byte[] buf,int lenght,InetAddress address,int port) //将数据以字节形式发送到目标地址的目的端口。
DatagramPacket(byte[] buf, int length); // 仅仅一个数据包,没有目标地址
1、将一段文字用UDP传输方式发送出去
DatagramSocket ds = new DatagramSocket();
byte[] buf = "udp 我来了!!".getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("114.101.151.43"), 10000);
ds.send(dp); //发送数据包
ds.close();
因为面向无连接,接收端未开,所以这段数据会丢失掉。
2、用一个接收端来接收上面的数据
DatagramSocket ds = new DatagramSocket(10000);byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, buf.length);ds.receive(dp); //接收数据包String ip = dp.getAddress().getHostAddress();String data = new String(dp.getData(),0,dp.getLength());int port = dp.getPort();System.out.println(ip+"...."+data+"..."+port);ds.close();
TCP传输
Socket(客户端)和ServerSocket(服务器端)
1、简单的TCP客户端与服务器端交流
客户端
import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class TcpClient1{public static void main(String[] args) throws Exception{Socket s = new Socket("192.168.1.103",9001);OutputStream out = s.getOutputStream();out.write("服务端,你好啊".getBytes());InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf,0,len));s.close();}}
服务端
import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class TcpServer1 {public static void main(String[] args)throws Exception {ServerSocket ss = new ServerSocket(9001);Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip+"...connected");InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf,0,len));OutputStream out = s.getOutputStream();out.write("哥们收到,你也好啊".getBytes());s.close();ss.close();}}
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 网络编程
- 在Ubuntu下打开pdf时中文乱码解决
- 向函数中传入二维数组并返回它的具体实现
- 控件移动
- Hetergeneous Parallel Programming编程作业之MP0: Initial Lab Tour with Device Query
- 时间序列作业
- 网络编程
- Android的SDK与ADT不匹配问题 取巧的解决方法
- eclipse搭建hadoop开发环境
- Androi Activity实验1 Intent(意图)
- Hetergeneous Parallel Programming编程作业之MP1: Vector Addition
- 从N个数中选取最大的前10个[堆排序版]
- android 无法安装ApiDemos的问题
- Androi Activity实验2 加法计算器
- 情感化移动应用设计