TCP服务器端
package org.bruce.basic;
import java.io.DataInputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
public class TestClient {
public static void main(String[] args) {
Socket s = null;
try {
s = new Socket("127.0.0.1", 8888);
DataInputStream dis = new DataInputStream(s.getInputStream());
System.out.println(dis.readUTF());
dis.close();
s.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
TCP客户端
package org.bruce.basic;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class TestServer {
public static void main(String[] args) {
ServerSocket ss = null;
try {
ss = new ServerSocket(9999);
} catch (IOException e) {
e.printStackTrace();
}
try {
while(true) {
Socket s = ss.accept();
System.out.println("a client connect!");
DataOutputStream dos = new DataOutputStream(s.getOutputStream());
dos.writeUTF("IPAddress = " + s.getInetAddress() + " Port = " + s.getPort());
dos.close();
s.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
UDP服务器端
package org.bruce.basic;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
//UDP传输是一种无连接的数据传输方式,相较于TCP传输,它也是有它存在的道理的
public class UDPServer {
public static void main(String[] args) {
//以 "字节数组" 的形式开辟一块内存用于缓存接收到的UDP数据包
byte[] buffer = new byte[1024];
//虽然开辟的缓冲内存大小为1024字节,但也可以设置一个小于该值的缓存空间接收数据包
DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
DatagramSocket ds = null;
try {
//监听在UDP 9999 端口
ds = new DatagramSocket(9999);
} catch (SocketException e) {
e.printStackTrace();
}
while(true) {
try {
//receive() 方法是一个阻塞性方法!
ds.receive(dp);
} catch (IOException e) {
e.printStackTrace();
}
//从下一行代码中可以学习到一种用字节数组构造字符串对象的方法
System.out.println(new String(buffer, 0, dp.getLength()));
}
}
}
UDP客户端
package org.bruce.basic;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class UDPClient {
public static void main(String[] args) {
//先将 "Hello!" 封装成一个字符串对象,在调用其 getBytes() 方法将其转换成字节数组
//转换成字节数组是为了方便传输
byte[] buffer = (new String("Hello!")).getBytes();
DatagramPacket dp = null;
try {
//将要发送的数据、要发送到什么地址设置好并打成一个 DatagramPacket 包
dp = new DatagramPacket(buffer, buffer.length, new InetSocketAddress("127.0.0.1", 9999));
} catch (SocketException e) {
e.printStackTrace();
}
DatagramSocket ds = null;
try {
//new 一个DatagramSocket对象(即打开一个UDP端口准备从此处发出数据包)
ds = new DatagramSocket(9998);
ds.send(dp);
ds.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}