服務器端Socket程序
package com.aaa.servet;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;//導入java.net包,用於網絡通訊
import java.net.Socket;
public class ServetSocketTest {
public static void main(String[] args) {
System.out.println("...啓動服務器...");
//1.初始化服務端Socket並綁定端口爲8888
try {
ServerSocket serverSocket=new ServerSocket(8888);//需要添加try/catch塊
//2.等待客戶端的連接
Socket socket=serverSocket.accept();
//3.獲取輸入流,通過socket對象流,傳遞給緩衝字符流進行讀取;
BufferedReader bufferReader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
//4.讀取一行數據;
String str=bufferReader.readLine();
//5.輸出打印
System.out.println(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 客戶端程度代碼
package com.aaa.clicent;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientSocket {
public static void main(String[] args) {
//1.創建socket對象,建立到服務i端的連接;
try {
Socket socket=new Socket("127.0.0.1",8888);
//2.通過緩衝輸出流,包裝下socket對象的輸出字節流,進行寫操作;
BufferedWriter bufferWriter=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//3.構造字符串,寫進去
String str="你是我的小心肝";
bufferWriter.write(str);
//3.2還需要將緩衝中的內容放到socket
bufferWriter.flush();
//4.注意一定要有關閉連接;
socket.shutdownOutput();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
- 案例效果:
5.現在需要繼續升級,如何循環!!!可以多個循環;
服務器端修改爲:
客戶端修改爲:
--------UDP Socket連接---
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPServer {
public static void main(String[] args) {
//1.創建服務器端的DatagramSocket數據包,
try {
DatagramSocket datagramSocket=new DatagramSocket(8800);
//2.創建數據報,用於接受用戶傳送過來的數據;存放於字節數組;
byte[]bytes=new byte[1024];
DatagramPacket datagramPacket=new DatagramPacket(bytes,bytes.length);
System.out.println("*****服務器端已經啓動****");
//使用receive方法接受;
datagramSocket.receive(datagramPacket);
//4.讀取數據;
String info=new String(bytes,0,datagramPacket.getLength());
//5.輸出信息;
System.out.println("服務器,客戶端信息爲:"+info);
//升級,服務器端響應客戶端;
InetAddress address=datagramPacket.getAddress();
int port=datagramPacket.getPort();
byte[]sinfo="歡迎您".getBytes();
//升級2.創建數據報,包含socket信息;
DatagramPacket packet=new DatagramPacket(sinfo,sinfo.length,address,port);
// 升級3;
datagramSocket.send(packet);
//關閉資源;
datagramSocket.close();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
==客戶端
import java.io.IOException;
import java.net.*;
public class UDPClient {
public static void main(String[] args) {
//1.定義服務器的地址、端口號、數據;
try {
InetAddress address=InetAddress.getByName("localhost");
int port=8800;
byte[]data="用戶名:admin,密碼:123".getBytes();
//2.創建數據報,包含發送的數據信息,可以使用帶有4個參數的方法;
DatagramPacket datagramPacket=new DatagramPacket(data,data.length,address,port);
//3.創建DatagramSocket對象;
DatagramSocket datagramSocket=new DatagramSocket();
//4.向服務器發送數據;
datagramSocket.send(datagramPacket);
////升級
byte[]data2=new byte[1024];
DatagramPacket packet2=new DatagramPacket(data2,data2.length);
//2.接受服務器響應的數據 ;
datagramSocket.receive(packet2);
//3.讀取數據;
String reply=new String(data2,0,packet2.getLength());
System.out.println("我是客戶端,服務器端說:"+reply);
//4.關閉資源;
datagramSocket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}