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();//釋放資源
}
}