package Test1;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
public class Communication {
private String ip;
private int port;
public Communication(String ip, int port) {
this.ip = ip;
this.port = port;
}
public void tcpClientTest() {
try {
Socket clientSock = new Socket(ip, port);
OutputStream out = clientSock.getOutputStream();
String message = "Hello World";
byte[] writeBytes = message.getBytes("UTF-8");
out.write(writeBytes);
InputStream inputStream = clientSock.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len = inputStream.read(bytes)) != -1) {
//注意指定编码格式,发送方和接收方一定要统一,建议使用UTF-8
sb.append(new String(bytes, 0, len, "UTF-8"));
System.out.println("get message from server: " + sb);
sb.delete(0, sb.length());
}
System.out.println("get message from server: " + sb);
clientSock.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
public void tcpServerTest() {
try {
ServerSocket servSock = new ServerSocket(port);
//等待客户端连接
Socket socket = servSock.accept();
OutputStream out = socket.getOutputStream();
String message = "Connection Estimated";
byte[] bytes = message.getBytes("UTF-8");
out.write(bytes);
InputStream input = socket.getInputStream();
byte[] readBytes = new byte[1024];
StringBuilder sb = new StringBuilder();
int len;
while ((len = input.read(readBytes)) != -1) {
sb.append(new String(readBytes, 0, len, "UTF-8"));
System.out.println(sb);
sb.delete(0, sb.length());
}
socket.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
public void udpSendTest() {
DatagramSocket socket = null;
try {
socket = new DatagramSocket();
String message = "Hello World";
byte[] sendData = message.getBytes("UTF-8");
InetAddress address = InetAddress.getByName(ip);
DatagramPacket packet = new DatagramPacket(sendData, sendData.length, address, port);
socket.send(packet);
} catch (Exception e) {
System.out.println(e.toString());
} finally {
socket.close();
}
}
public void udpReceiveTest() {
DatagramSocket socket = null;
try {
socket = new DatagramSocket(9999);
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
//处理接收的数据
System.out.println("IP:" + packet.getAddress() + " " + packet.getPort());
byte[] rcvData = packet.getData();
for (int i = 0; i < packet.getLength(); ++i) {
System.out.println((char) rcvData[i]);
}
} catch (Exception e) {
System.out.println(e.toString());
} finally {
socket.close();
}
}
public void tcpClientTest1() {
try {
Socket socket = new Socket(InetAddress.getByName(ip), port);
OutputStream out = socket.getOutputStream();
String sendMsg = "Hello World";
out.write(sendMsg.getBytes("UTF-8"));
InputStream input = socket.getInputStream();
byte[] rcvMsg = new byte[1024];
int len = input.read(rcvMsg);
for (int i = 0; i < len; ++i) {
System.out.print((char) rcvMsg[i]);
}
socket.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
public void tcpServerTest1() {
try {
ServerSocket serverSocket = new ServerSocket(9999);
Socket socket = serverSocket.accept();
System.out.println(socket.getInetAddress() + " " + socket.getPort());
InputStream input = socket.getInputStream();
byte[] rcvMsg = new byte[1024];
int len = input.read(rcvMsg);
for (int i = 0; i < len; ++i) {
System.out.println((char) rcvMsg[i]);
}
OutputStream out = socket.getOutputStream();
String sendMsg = "Hello World";
out.write(sendMsg.getBytes("UTF-8"));
socket.close();
serverSocket.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
public void udpSendTest1() {
try {
DatagramSocket datagramSocket = new DatagramSocket();
String msg = "Hello World";
DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes("UTF-8"), msg.length(), InetAddress.getByName(ip), port);
datagramSocket.send(datagramPacket);
datagramSocket.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
public void udpReceiveTest1() {
try {
DatagramSocket datagramSocket = new DatagramSocket(9999);
byte[] buf = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(buf, buf.length);
datagramSocket.receive(datagramPacket);
byte[] data = datagramPacket.getData();
for (int i = 0; i < datagramPacket.getLength(); ++i) {
System.out.println((char) data[i]);
}
} catch (Exception e) {
System.out.println(e.toString());
}
}
}