Java開(kāi)發(fā)實(shí)現(xiàn)的Socket雙向通信功能示例
本文實(shí)例講述了Java開(kāi)發(fā)實(shí)現(xiàn)的Socket雙向通信功能。分享給大家供大家參考,具體如下:
服務(wù)端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server_1 {
public static void main(String[] args) {
InputStreamReader isr;
BufferedReader br;
OutputStreamWriter osw;
BufferedWriter bw;
String str;
Scanner in = new Scanner(System.in);
try {
ServerSocket server = new ServerSocket(4444);// 在本機(jī)的4444端口開(kāi)放Server
Socket socket = server.accept();// 只要產(chǎn)生連接,socket便可以代表所連接的那個(gè)物體,同時(shí)這個(gè)server.accept()只有產(chǎn)生了連接才會(huì)進(jìn)行下一步操作。
System.out.println(socket.getInetAddress());// 輸出連接者的IP。
System.out.println("建立了一個(gè)連接!");
while (true) {
isr = new InputStreamReader(socket.getInputStream());
br = new BufferedReader(isr);
System.out.println(socket.getInetAddress() + ":" + br.readLine());
osw = new OutputStreamWriter(socket.getOutputStream());
bw = new BufferedWriter(osw);
System.out.print("回復(fù):");
str = in.nextLine();
bw.write(str + "\n");
bw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客服端
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Client_1 {
public static void main(String[] args) {
InputStreamReader isr;
BufferedReader br;
OutputStreamWriter osw;
BufferedWriter bw;
String str;
Scanner in = new Scanner(System.in);
try {
Socket socket = new Socket("localhost", 4444);
// System.out.println(socket.getInetAddress());// 輸出連接者的IP。
System.out.println("成功連接服務(wù)器");
while (true) {
osw = new OutputStreamWriter(socket.getOutputStream());
bw = new BufferedWriter(osw);
System.out.print("回復(fù):");
str = in.nextLine();
bw.write(str + "\n");
bw.flush();
isr = new InputStreamReader(socket.getInputStream());
br = new BufferedReader(isr);
System.out.println(socket.getInetAddress() + ":" + br.readLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
從零到掌握Spring Boot Validation 接口校驗(yàn)的詳細(xì)過(guò)程
本文詳細(xì)介紹了SpringBoot的Validation接口校驗(yàn)機(jī)制,包括其核心功能、常用注解、自定義校驗(yàn)、以及實(shí)際應(yīng)用場(chǎng)景,通過(guò)注解定義數(shù)據(jù)校驗(yàn)規(guī)則,感興趣的朋友跟隨小編一起看看吧2025-02-02
解決jackson反序列化失敗InvalidFormatException:Can not dese
這篇文章主要介紹了解決jackson反序列化失敗InvalidFormatException:Can not deserialize value of type java.util.Date問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
java web監(jiān)聽(tīng)器統(tǒng)計(jì)在線用戶及人數(shù)
本文主要介紹了java web監(jiān)聽(tīng)器統(tǒng)計(jì)在線用戶及人數(shù)的方法解析。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-04-04
Java中的CyclicBarrier循環(huán)柵欄深入解析
這篇文章主要介紹了Java中的CyclicBarrier循環(huán)柵欄深入解析,CycleBarrier 它就相當(dāng)于是一個(gè)柵欄,所有線程在到達(dá)柵欄后都需要等待其他線程,等所有線程都到達(dá)后,再一起通過(guò),需要的朋友可以參考下2023-12-12
SpringBoot配置Profile實(shí)現(xiàn)多環(huán)境支持
這篇文章主要介紹了SpringBoot配置Profile實(shí)現(xiàn)多環(huán)境支持操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08

