Tcp
实现客户端与服务端交互的步骤:
服务端:
①通过ServerSocket类创建一个对象,参数传入ip地址和端口号;
②循环等待客户端连接,连接成功后返回一个套接字对象;
③服务端套接字socket调用getInputStream() 方法可以获得输入流;
④通过InputStream的read() 方法读取客户端发送的消息;
客户端:
①通过Socket类,将服务器的的ip地址和对应的端口号作为构造参数创建一个套接字对象,即完成连接。
②通过OutputStream流向服务端发送信息。
例子:
服务端:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public TcpServer() throws IOException {
ServerSocket serverSocket=new ServerSocket(9999);
while (true) {
Socket socket=serverSocket.accept();
InputStream inputStream =socket.getInputStream();
ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
byte[] buffer=new byte[1024];
while (inputStream.read(buffer)!=-1){
byteArrayOutputStream.write(buffer);
}
System.out.println(byteArrayOutputStream.toString());
inputStream.close();
byteArrayOutputStream.close();
socket.close();
}
}
public static void main(String args[]) throws IOException {
TcpServer tcpServer=new TcpServer();
}
}
客户端:
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class TcpClient {
public TcpClient() throws IOException {
Socket socket=new Socket("127.0.0.1",9999);
OutputStream outputStream=socket.getOutputStream();
outputStream.write("服务端你好,我来了".getBytes());
System.out.println("执行了1");
socket.close();
}
public static void main(String args[]) throws IOException {
TcpClient tcpClient=new TcpClient();
}
}
Udp
udp是没有服务端的,你可以给我发送数据,我也可以给你发送,下面程序的服务端只是虚设的,只要发送端确定发送对象的ip和端口号就可以直接发送数据包dataGramPocket。步骤如下:
①创建DataGramSocket对象;
②创建DataGramPocket数据包,参数包含了消息内容,长度,接收方的ip地址,端口号等(或创建一个空的数据包来接受信息);
③socket对象调用send(pocket) 方法将数据包发送(或调用receive(pocket) 方法将接收到的消息存到数据包中)。
④pocket提供了方法可以获取到数据内容。
例子:
发送端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UdpClient {
public UdpClient() throws IOException {
DatagramSocket socket=new DatagramSocket();
String msg="你好啊hhhhhh";
InetAddress localhost=InetAddress.getByName("localhost");
DatagramPacket packet=new DatagramPacket(msg.getBytes(),0,msg.getBytes().length, localhost,8888);
socket.send(packet);
socket.close();
}
public static void main(String args[]) throws IOException {
UdpClient udpClient=new UdpClient();
}
}
接收方:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UdpServer {
public UdpServer() throws IOException {
DatagramSocket socket=new DatagramSocket(8888);
byte[] data=new byte[100];
DatagramPacket packet=new DatagramPacket(data,0,data.length);
socket.receive(packet);
System.out.println(new String(packet.getData()));
socket.close();
}
public static void main(String args[]) throws IOException {
UdpServer udpServer=new UdpServer();
}
}