您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java利用Socket實現(xiàn)通訊客戶端的代碼怎么寫的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java利用Socket實現(xiàn)通訊客戶端的代碼怎么寫文章都會有所收獲,下面我們一起來看看吧。
具體客戶端代碼如下:
import java.net.*;
import java.io.*;
import org.apache.log4j.Logger;
public class SocketClient {
static Logger log = Logger.getLogger(SocketClient.class.
getName()); //日志記錄信息private String hostName;
private int portNum;
private int delaySecond; // 發(fā)文接收返回報文延時
public SocketClient() {
this.hostName = "192.168.0.1";
this.portNum = 7000;
this.delaySecond = 50000;
pFileOp = null;
}
private Socket getSocket() {
Socket socket = null;
try {
socket = new Socket(hostName, portNum);
} catch (UnknownHostException e) {
System.out.println("-->未知的主機(jī)名:" + hostName + " 異常");
} catch (IOException e) {
System.out.println("-hostName=" + hostName + " portNum="
+ portNum + "---->IO異常錯誤" + e.getMessage());
}
return socket;
}
public String sendMessage(String strMessage) {
String str = "";
String serverString = "";
Socket socket;
try {
socket = getSocket();
// socket.setKeepAlive(true);
if (socket == null) { // 未能得到指定的Socket對象,Socket通訊為空
return "0001";
}
PrintWriter out = new PrintWriter(socket.getOutputStream());
//log.info("---->發(fā)送報文="+strMessage);
out.println(strMessage);
out.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
long sendTime = System.currentTimeMillis();
long receiveTime = System.currentTimeMillis();
boolean received = false; // 成功接收報文
boolean delayTooLong = false;
serverString = null;
while (!received && !delayTooLong) {
if (socket.getInputStream().available() > 0) {
// serverString = in.readLine();
char tagChar[];
tagChar = new char[1024];
int len;
String temp;
String rev = "";
if ((len = in.read(tagChar)) != -1) {
temp = new String(tagChar, 0, len);
rev += temp;
temp = null;
}
serverString = rev;
}
receiveTime = System.currentTimeMillis();
if (serverString != null)
received = true; // 字符串不為空,接收成功
if ((receiveTime - sendTime) > delaySecond)
delayTooLong = true; // 接收等待時間過長,超時
}
in.close();
out.close();
str=serverString;
if (delayTooLong) str="2190"; //超時標(biāo)志為真,返回超時碼
if (!received) str ="2190";
socket.close();
} catch (UnknownHostException e) {
log.error("---->出現(xiàn)未知主機(jī)錯誤! 主機(jī)信息=" + this.hostName +
" 端口號="+ this.portNum + " 出錯信息=" + e.getMessage());
str = "2191";
// System.exit(1);
} catch (IOException e) {
log.error("---->出現(xiàn)IO異常! 主機(jī)信息=" + this.hostName +
" 端口號="+ this.portNum + " 出錯信息=" + e.getMessage());
e.printStackTrace();
str = "2191";
} catch (Exception e) {
str="2177";
log.error("---->出現(xiàn)未知異常" + e.getMessage());
} finally {
socket = null;
str.trim();
//log.info("--->返回的socket通訊字符串="+str);
return str;
}
}
}
關(guān)于“Java利用Socket實現(xiàn)通訊客戶端的代碼怎么寫”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Java利用Socket實現(xiàn)通訊客戶端的代碼怎么寫”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。