public class SocketTCP04Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket =new ServerSocket(9999);
System.out.println("Server:"+serverSocket.getClass());
System.out.println("正在等待用戶連接...");
//當(dāng)有用戶連接時(shí),會(huì)返回一個(gè)socket對(duì)象
Socket socket = serverSocket.accept();
System.out.println("Client:"+serverSocket.getClass());//查看連接到的用戶
//接受Client的輸入信息
String read =null;
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));
while ((read= bufferedReader.readLine())!=null){
System.out.println(read);
}
// String s = bufferedReader.readLine();
// System.out.println(s);
// socket.shutdownInput();
//現(xiàn)在向Client發(fā)送數(shù)據(jù)
OutputStream outputStream = socket.getOutputStream();
BufferedWriter bufferedWriter =new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("Hello, Client 字符流");
bufferedWriter.newLine();//插入換行符,表示回復(fù)內(nèi)容的結(jié)束
bufferedWriter.flush();
System.out.println("服務(wù)器已關(guān)閉~");
bufferedWriter.close();
bufferedReader.close();
socket.close();
serverSocket.close();
}
}
public class SocketTCP04Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket(InetAddress.getLocalHost(), 9999);
System.out.println("獲取的Client的socket:" + socket.getClass());
//現(xiàn)在向Server發(fā)送信息
OutputStream outputStream = socket.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("Hello,server 字符流");
bufferedWriter.newLine();
/**插入換行符后,相當(dāng)于寫(xiě)入結(jié)束,就不用socket.shutdownOutput();
此時(shí)對(duì)面一定要使用readLine()一次讀一行代表讀取結(jié)束*/
bufferedWriter.flush();
//現(xiàn)在接受Server的信息
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String read = null;
while ((read = bufferedReader.readLine()) != null) {
System.out.println(read);
}
// String s = bufferedReader.readLine();
// System.out.println(s);
socket.shutdownInput();
bufferedReader.close();
bufferedWriter.close();
socket.close();
}
}
?
?
此時(shí)的服務(wù)器還在等待輸入,客戶端也在等待服務(wù)器的應(yīng)答,產(chǎn)生死鎖,僵持不下。
經(jīng)過(guò)一番嘗試后發(fā)現(xiàn),
當(dāng)使用單行讀取的時(shí)候,使用bufferedWriter.newLine();此時(shí)就不用關(guān)閉socket的輸出流,即socket.shutdownOutput();可以省略,當(dāng)然寫(xiě)上去也沒(méi)錯(cuò)。
當(dāng)使用多行讀取的時(shí)候,此時(shí),必須使用關(guān)閉socket的輸出流,即socket.shutdownOutput();不能省略?。?!
單行接受代碼如下:?
這是Client:?
//現(xiàn)在向Server發(fā)送信息
OutputStream outputStream = socket.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("Hello,server 字符流");
bufferedWriter.newLine();
/**插入換行符后,相當(dāng)于寫(xiě)入結(jié)束,就不用socket.shutdownOutput();
此時(shí)對(duì)面一定要使用readLine()一次讀一行代表讀取結(jié)束*/
bufferedWriter.flush();
socket.shutdownOutput();//可以省略,加上不為錯(cuò)
這是Server端:?
//接受Client的輸入信息
String read =null;
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));
String s = bufferedReader.readLine();
System.out.println(s);
socket.shutdownInput();
多行讀取時(shí):
這是Client端:?文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-734549.html
//現(xiàn)在向Server發(fā)送信息
OutputStream outputStream = socket.getOutputStream();
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write("Hello,server 字符流");
bufferedWriter.newLine();
/**插入換行符后,相當(dāng)于寫(xiě)入結(jié)束,就不用socket.shutdownOutput();
此時(shí)對(duì)面一定要使用readLine()一次讀一行代表讀取結(jié)束*/
bufferedWriter.flush();
socket.shutdownOutput();//一定不能省略
?這是Server端:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-734549.html
//接受Client的輸入信息
String read =null;
InputStream inputStream = socket.getInputStream();
BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(inputStream));
while ((read= bufferedReader.readLine())!=null){
System.out.println(read);
}
socket.shutdownInput();//不可省
到了這里,關(guān)于當(dāng)在本地,向服務(wù)器發(fā)送信息時(shí),服務(wù)器接受信息返回給客戶端,此時(shí)采用多行讀取時(shí),客戶端接收不到Server的信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!