1、网络编程
Socket套接字:网络上具有唯一标识的IP地址和端口号组合构成具有唯一标识符的套接字。
Socket原理机制:
通信的两端都有套接字
网络通信其实就是Socket间的通信、
数据在两个Socket套接字之间通过IO流传输。
2、InetAddress类
public static InetAddress getByName(String host)throws UnknownHostException:根据主机名或IP地址的字符串得到IP对象
public String getHostName():获取此IP地址的主机名
public String getHostAddress():返回此IP地址的字符串表示形式
3、UDP协议发送数据:
DatagramSocket类;
public DatagramSocket() throws SocketException:创建Socket对象
public void send(DatagramPacket p) throws IOException:发送数据包
public void close():关闭套接字
DatagramPacket类:
public DatagramPacket(byte[] buf, int length, InetAddress address, int port):创建数据包,并将数据打包。buf表示报数据,length表示包长度
实例:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* UDP协议发送端
* @author Administrator
*
*/
public class UdpSend {
public static void main(String[] args) throws IOException {
//创建socket对象
DatagramSocket ds = new DatagramSocket();
//获取目的IP地址
InetAddress ip = InetAddress.getByName("Ruthevil");
//封装数据包
String s = "hello柳岩";
byte[] bys = s.getBytes();
DatagramPacket dp = new DatagramPacket(bys, bys.length, ip, 10086);
//发送数据
ds.send(dp);
//关闭套接字
ds.close();
}
}
4、UDP协议接收数据:
DatagramSocket类;
public DatagramSocket(int port) throws SocketException:创建Socket对象,并将其绑定到指定端口
public void receive(DatagramPacket p) throws IOException:从此套接字接收数据包
public byte[] getData():获取数据缓冲区
public int getLength():返回接收到的数据的实际长度
public void close():关闭套接字
DatagramPacket类:
public DatagramPacket(byte[] buf,int length):创建数据包,接收数据
public InetAddress getAddress():获取发送数据的机器的IP对象
实例:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* UDP接收数据
* @author Administrator
*
*/
public class UdpServer {
public static void main(String[] args) throws IOException {
//创建Socket接收对象
DatagramSocket ds = new DatagramSocket(10086);
//创建数据包,接收数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//接收数据
ds.receive(dp);
//显示在控制台
String s = new String(dp.getData(), 0 ,dp.getLength());
System.out.println(dp.getAddress().getHostName()+":"+s);
//关闭套接字
ds.close();
}
}
5、TCP协议发送数据
Socket类:
public Socket(InetAddress address, int port) throws IOException:创建Socket套接字,并绑定到指定的IP和端口
public OutputStream getOutputStream() throws IOException:返回此套接字的输出流
public void close():关闭套接字
public void shutdownOutput() throws IOException:禁用此套接字的输出流。
OutputStream类:
public void write(byte[] b) throws IOException:向输出流写入数据
实例:
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
/**
* TCP发送数据
* @author Administrator
*
*/
public class TcpSend {
public static void main(String[] args) throws IOException {
//创建Socket发送套接字对象
Socket s = new Socket("Ruthevil",10010);
//获取输出流对象
OutputStream os = s.getOutputStream();
//写入数据
os.write("Hello柳岩".getBytes());
//关闭套接字
s.close();
}
}
6、TCP协议接收数据
ServerSocket类:
public ServerSocket(int port) throws IOException:创建绑定到特定端口的服务器套接字
public Socket accept() throws IOException:监听客户端连接,返回对应的Socket对象
Socket类:
public InputStream getInputStream() throws IOException:返回此套接字的输入流。
InputStream类:
public int read(byte[] b) throws IOException:从输入流中读取数据
实例:
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* TCP接受数据
*/
public class TcpServer {
public static void main(String[] args) throws IOException {
//创建接收端套接字对象
ServerSocket ss = new ServerSocket(10010);
//监听客户端连接,获取对应的Socket
Socket s = ss.accept();
//返回此套接字的输入流
InputStream is = s.getInputStream();
//读取数据
byte[] byt = new byte[1024];
int len = is.read(byt);
String str = new String(byt,0,len);
System.out.println(str);
//关闭套接字
ss.close();
}
}