最近要用到TCP与UDP通信,故学习一下。
1.TCP通信
a.TCPServer
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
// 建立ServerSocket,并设置其端口号
private ServerSocket ss;
public static final int port = 8962;
public TCPServer() {
try {
ss = new ServerSocket(port);
} catch (IOException e) {
e.printStackTrace();
}
}
public void setConnection() throws IOException {
// 建立服务器端的Socket
Socket s;
OutputStream os;
try { // ServerSocke.accept()t返回一个Socket对象
s = ss.accept();
os = s.getOutputStream();
os.write("hello".getBytes());
os.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
TCPServer ms = new TCPServer();
ms.setConnection();
}
}
b.TCPClient
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class TCPClient {
public static final String IP = "192.168.0.157";
public static final int port = 8962;
private Socket s;
public TCPClient() throws IOException {
try {
s = new Socket(IP, port);
} catch (IOException e) {
e.printStackTrace();
}
}
public void setConnection() throws IOException {
InputStream is;
try {
is = s.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
System.out.println(br.readLine());
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]) throws IOException {
TCPClient mc = new TCPClient();
mc.setConnection();
}
}
2.UDP通信
a.UDPServer
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServer {
public static void main(String[] rrgs) throws IOException {
DatagramSocket socket = new DatagramSocket(14567);
while (true) {
byte data[] = new byte[1024];
// 创建一个空的DatagramPacket对象
DatagramPacket packet = new DatagramPacket(data, data.length);
// 使用receive方法接收客户端所发送的数据,
// 如果客户端没有发送数据,该进程就停滞在这里
socket.receive(packet);
String result = new String(packet.getData(), packet.getOffset(),
packet.getLength());
System.out.println("result--->" + result);
}
}
}
b.UDPClient
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPClient {
public static void main(String[] args) {
try {
// 首先创建一个DatagramSocket对象
DatagramSocket socket = new DatagramSocket();
// 创建一个InetAddree
InetAddress serverAddress = InetAddress.getByName("192.168.0.157");
String str = "hello"; // 这是要传输的数据
byte data[] = str.getBytes(); // 把传输内容分解成字节
// 创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、地址,以及端口号
DatagramPacket packet = new DatagramPacket(data, data.length,
serverAddress, 14567);
// 调用socket对象的send方法,发送数据
socket.send(packet);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}