网络编程的基础知识
- 网络协议与TCP/IP
- IP地址和Port(端口号)
- 本地回路的IP地址:127.0.0.1
- 端口号的范围为0---65535之间,0----1023之间的端口数是用于一些知名的网络服务和应用
- UDP与TCP
TCP,传输控制协议,是面向连接的通信协议
UDP,用户数据报协议,是无连接通信协议
Socket
- Socket是网络驱动层提供给应用程序编程的接口和一种机制
- 可以吧Socket比喻成是一个港口码头。应用程序只要把货物放到港口码头上,就算完成了货物的运送。应用程序只需等待货物到达码头后,将货物取走
- Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和Port。

Java中的网络编程类
- 位于java.net包中
- DatagramSocket类用于UDP通信
- ServerSocket类用于TCp通信的服务器端
- Socket类用于TCP通信的服务器和客户端
UDP网络程序
- DatagramSocket类
- DatagramPacket类
- InetAddress类
- 最简单得UDP程序
- 用UDP编写网络聊天程序
DatagramSocket类
- 构造函数
- close方法
- send(DatagramPacket p)方法
- receive(DatagramPacket p)方法
DatagramPacket类
如果把DatagramSocket比作创建的港口码头,那么DatagramPacket就是发送和接收数据的集装箱。
- 构造函数
- getInetAddress和getPort方法
- getData和getLength方法
InetAddress类
- InetAddress是计算机IP地址的一个类,而在日常应用中的计算机地址是用“192.168.0.1”、"www.it315.org"等字符串格式来表示的。
- getByName方法
- getHostAddress方法
最简单得UDP程序
- 字符串与字符数组之间的双向转换
- UDP接收程序必须先启动运行,才能接受UDP发送程序发送的数据
- 用start命令来打开新命令行窗口的好处
- 解决发送中文字符串的问题。
package blackhouse.net;
import java.io.IOException;
import java.net.*;
public class UDPSender
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds = new DatagramSocket();// 由系统自己分配
String strInfo = "hello www.315.org";
ds.send(new DatagramPacket(strInfo.getBytes(), strInfo.length(),
InetAddress.getByName("192.168.0.10"), 3000));
ds.close();
}
}
package blackhouse.net;
import java.io.IOException;
import java.net.*;
public class UDPRecv
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds = new DatagramSocket(3000);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, 1024);
ds.receive(dp);
String strInfo = new String(dp.getData(), 0, dp.getLength());
System.out.println(strInfo + " form "
+ dp.getAddress().getHostAddress() + ":" + dp.getPort());
ds.close();
}
}
如果你传送的是中文字符会接受不到,此时只要将
ds.send(new DatagramPacket(strInfo.getBytes(), strInfo.length(),
InetAddress.getByName("192.168.0.10"), 3000));
的发送长度该为strInfo.getBytes().length即可。