UDP
服务端
public class UDPServer {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
DatagramSocket socket=new DatagramSocket(8800);
byte[] num=new byte[1024];
DatagramPacket packet=new DatagramPacket(num,num.length);
System.out.println("********服务端已经启动,正在等待客户端发送信息*******");
socket.receive(packet);//服务端已经接收数据,它与客户端已经有连接,packet内有地址和端口号
String info=new String(num,0,packet.getLength());//从NUM中接收数据,数据的长度是packet包中传来的数据长度
System.out.println("服务端接收到客户端说"+info);//服务端打印出客户端的信息
String str="服务端接收到了您的信息!";
InetAddress address=packet.getAddress();
int port=packet.getPort();
byte[] arr=str.getBytes();
DatagramPacket packet1=new DatagramPacket(arr,arr.length,address,port);
//需要传送的字节数组和字节数组长度和客户端的地址和端口号,里面是客户端的信息
socket.send(packet1);//socket要发送数据报
socket.close();
}
}
客户端
public class UDPClient {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
/*
* 向服务器发送数据
*/
//定义服务器的地址、端口号、数据
InetAddress address=InetAddress.getByName("localhost");//用户端的地址
int port=8800;
byte[] num="我是客户发给服务端的消息".getBytes();
DatagramSocket socket=new DatagramSocket();
DatagramPacket js=new DatagramPacket(num,num.length,address,port);//数据报的所有信息是服务端的
socket.send(js);
/*
* 接收服务端发送数据
*/
byte[] arr=new byte[1024];
DatagramPacket js1=new DatagramPacket(arr,arr.length);//packet内是字节数组
socket.receive(js1);//socket端口只能被packet接收
String info=new String(arr,0,js1.getLength());//字符串是字节0--包接收的长度
System.out.println("客户端接收到服务端,服务端说"+info);
socket.close();
}
}
TCP
服务端
public class TCPServer {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
/*
* 1监听或确认接收数据
* 2获取客户端输出流
* 3交互数据
*/
int port=8844;
ServerSocket serverSocket=new ServerSocket(port);
Socket socket=serverSocket.accept();//开始监听,确认接收数据
OutputStream os=socket.getOutputStream();//接收客户端数据中的输出端
System.out.println("**********交互数据*********");
byte[] arr="服务端欢迎您!".getBytes();
os.write(arr);//向客户端的输出流写入服务端的数据byte
InputStream is=socket.getInputStream();
byte[] brr=new byte[1024];
int len=is.read(brr);
System.out.println("客户端对服务端说"+new String(brr,0,len));
is.close();
os.close();//输出流关闭
socket.close();//socket关闭
serverSocket.close();
}
}
客户端
public class TCPClient {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
int port=8844;//服务端的端口号
InetAddress address=InetAddress.getByName("localhost");//得到服务端的地址
Socket socket=new Socket(address,port);
InputStream is=socket.getInputStream();//得到接收数据流
byte[] arr=new byte[1024];
int len=is.read(arr);
System.out.println("服务器对客户端说"+new String(arr,0,len));
OutputStream os=socket.getOutputStream();
byte[] brr="我是客户端,你好!".getBytes();
os.write(brr);
os.close();
socket.close();//释放资源
}
}
多线程TCP
服务端
public class TCPServer {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
int post=8899;
ServerSocket serverSocket=new ServerSocket(post);
while(true) {
Socket socket=serverSocket.accept();
new Thread() {//为每个用户创建socket
OutputStream os;
public void run() {
try {
os=socket.getOutputStream();
System.out.println("**********交互数据*********");
byte[] arr="服务端欢迎您!".getBytes();
os.write(arr);//向客户端的输出流写入服务端的数据byte
InputStream is=socket.getInputStream();
byte[] brr=new byte[1024];
int len=is.read(brr);
System.out.println("客户端对服务端说"+new String(brr,0,len));
is.close();
os.close();//输出流关闭
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}.start();
}
}
}
客户端
public class TCPClient {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
int post=8899;
InetAddress adress=InetAddress.getByName("localhost");
Socket socket=new Socket(adress,post);
InputStream is;
is=socket.getInputStream();//得到接收数据流
byte[] arr=new byte[1024];
int len=is.read(arr);
System.out.println("服务器对客户端说"+new String(arr,0,len));
OutputStream os=socket.getOutputStream();
byte[] brr="我是客户端,你好!".getBytes();
os.write(brr);
os.close();
socket.close();//释放资源
}
}