java的socket請(qǐng)求和響應(yīng)方式
java的socket請(qǐng)求和響應(yīng)
創(chuàng)建一個(gè)socket的server端
public class demo {
public static void main(String[] args) throws Exception{
// 監(jiān)聽指定的端口
int port = 55533;
ServerSocket server = new ServerSocket(port);
// server將一直等待連接的到來(lái)
System.out.println("server將一直等待連接的到來(lái)");
Socket socket = server.accept();
// 建立好連接后,從socket中獲取輸入流,并建立緩沖區(qū)進(jìn)行讀取
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
//只有當(dāng)客戶端關(guān)閉它的輸出流的時(shí)候,服務(wù)端才能取得結(jié)尾的-1
while ((len = inputStream.read(bytes)) != -1) {
// 注意指定編碼格式,發(fā)送方和接收方一定要統(tǒng)一,建議使用UTF-8
sb.append(new String(bytes, 0, len, "UTF-8"));
}
System.out.println("get message from client: " + sb);
OutputStream outputStream = socket.getOutputStream();
outputStream.write("客戶端,我收到信息了".getBytes("UTF-8"));
inputStream.close();
outputStream.close();
socket.close();
server.close();
}
}再創(chuàng)建一個(gè)socket的client端
@Slf4j
public class demo1 {
public static void main(String[] args) throws Exception {
String serverIP = "127.0.0.1";
int port = 55533;
int timeOut = 10000;
String data = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
"<SERVICE>\n" +
" <prcscd>mbr128</prcscd>\n" +
" <servtp>MBL</servtp>\n" +
" <datasq>CNT2018092500000000001</datasq>\n" +
" <servsq>20180206000000000001</servsq>\n" +
" <userid>0170901</userid>\n" +
" <brchno>017001</brchno>\n" +
" <servdt>20180925</servdt>\n" +
" <servti>165125</servti>\n" +
" <ipaddr>10.28.25.30</ipaddr>\n" +
" <mac>D4-BE-D9-A2-39-EF</mac>\n" +
" <acctno>100633778400041</acctno>\n" +
"</SERVICE>";
// 與服務(wù)端建立連接
Socket socket = new Socket(serverIP, port);
//設(shè)置超時(shí)時(shí)間
socket.setSoTimeout(timeOut);
// 建立連接后獲得輸出流
OutputStream outputStream = socket.getOutputStream();
socket.getOutputStream().write(data.getBytes("UTF-8"));
//通過(guò)shutdownOutput高速服務(wù)器已經(jīng)發(fā)送完數(shù)據(jù),后續(xù)只能接受數(shù)據(jù)
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
byte[] bytes = new byte[1024];
int len;
StringBuilder sb = new StringBuilder();
while ((len = inputStream.read(bytes)) != -1) {
//注意指定編碼格式,發(fā)送方和接收方一定要統(tǒng)一,建議使用UTF-8
sb.append(new String(bytes, 0, len,"UTF-8"));
}
System.out.println("收到響應(yīng)報(bào)文: " + sb);
inputStream.close();
outputStream.close();
socket.close();
}
}首先運(yùn)行server端,然后再運(yùn)行client端
這個(gè)時(shí)候看控制的打印
先看server端的控制臺(tái),這時(shí)收到了clietn端發(fā)來(lái)的信息

然后再看client端,看看server的返回信息是否有接收到

這樣,一個(gè)socket的請(qǐng)求就結(jié)束了,這么的demo中的代碼可以直接復(fù)用,只需將ip,port還有超時(shí)時(shí)間換了即可
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java啟動(dòng)jar包設(shè)置啟動(dòng)參數(shù)的實(shí)現(xiàn)
本文主要介紹了java啟動(dòng)jar包設(shè)置啟動(dòng)參數(shù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
java實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)為zip壓縮文件
這篇文章主要為大家詳細(xì)介紹了java如何實(shí)現(xiàn)導(dǎo)出數(shù)據(jù)為zip壓縮文件,并且解壓后為json文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
關(guān)于Java企業(yè)級(jí)項(xiàng)目開發(fā)思想
Java企業(yè)級(jí)項(xiàng)目開發(fā)思想。偶遇,讀有所得,遂分享給大家,本文不涉及案例,只談思想和理念,需要的朋友可以參考。2017-09-09
springboot實(shí)現(xiàn)過(guò)濾器的示例代碼
JavaWeb開發(fā)中,過(guò)濾器Filter是三大組件之一,主要用于請(qǐng)求攔截和響應(yīng)處理,如權(quán)限校驗(yàn)、日志記錄、請(qǐng)求過(guò)濾等,本文就來(lái)介紹一下springboot實(shí)現(xiàn)過(guò)濾器的示例代碼,感興趣的可以了解一下2024-10-10
Spring Security的持久化用戶和授權(quán)實(shí)現(xiàn)方式
文章介紹了如何使用JdbcUserDetailsManager實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀取用戶,并展示了如何配置SpringSecurity進(jìn)行授權(quán)管理,通過(guò)創(chuàng)建數(shù)據(jù)庫(kù)表、配置數(shù)據(jù)庫(kù)連接和修改SecurityConfig,實(shí)現(xiàn)了用戶權(quán)限的控制2025-02-02

