您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關java程序間怎么進行通信,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
socket,中文翻譯為套接字。它是一種對網絡中不同主機上的應用進程(或者相同主機的不同應用進程)之間進行雙向通信的端點的抽象。實際上就是兩個網絡各種通信連接中的端點。它的作用就是完成應用間的數據傳輸。
套接字技術簡單的來講就是通過socket,將兩個應用進行連接,連接之后就能進行數據傳輸了。socket只是實現連接的方法。
小編認為套接字這個翻譯并不能直接反映出這門技術的特點(過于生澀),socket可以被翻譯為插座,而實際上套接字技術更像是軟件上的“插座”和“插頭”。漢語中的套接,是一種水管對接的技術,使用一個套接管將兩端的水管連接起來,這種技術就叫套接,所以是不是能理解什么是套接字了呢?
不同語言實現套接字的方式不同,java有專門實現套接字的包。只需要import
相應的包,就可以進行套接字編程。
創建socket連接后可以通過getInputStream()
和getOutputStream()
的方法來獲取和發送socket之間傳輸的數據。
接下來就用一個實例代碼來介紹一下怎么使用socket吧!
server.java
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
public static void main(String[] args){
try {
ServerSocket serverSocket = new ServerSocket(8888);
//在8888端口上監聽,看是否有連接請求過來
System.out.println("開啟服務端");
Socket accept = serverSocket.accept();
//獲取socket連接
System.out.println("有連接過來"+accept);
Thread thread1 = new Thread(){//使用多線程來進行收發,線程1用來接收消息
@Override
public void run() {
try {
InputStream inputStream = accept.getInputStream();//獲取socket輸入流
DataInputStream dataInputStream = new DataInputStream(inputStream);
//把輸入流封裝在DataInputStream
while (true){
String msg = dataInputStream.readUTF();//使用readUTF讀取字符串
System.out.println("監聽客戶端消息: "+msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
Thread thread2 = new Thread(){//線程2用來發送消息
@Override
public void run() {
try {
OutputStream outputStream = accept.getOutputStream();
//打開輸出流
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
//把輸出流封裝在DataOutputStream中
Scanner scanner = new Scanner(System.in);
while (true){
String strServer = scanner.next();
dataOutputStream.writeUTF(strServer);//使用writeUTF發送字符串
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
thread1.start();
thread2.start();
thread1.join();
System.out.println("服務器關閉");
accept.close();//關閉單個socket連接
serverSocket.close(); //關閉這個socket 服務器
} catch (Exception e) {
System.out.println("斷開連接");
}
}
}
client.java
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
String host = "127.0.0.1";//目標電腦的ip地址,這里的地址是本機地址
int port = 8888;//目標電腦的端口
boolean flag = true;
try {
Socket socket = new Socket(host, port);//創建目標連接,傳入ip地址和端口號
System.out.println("開啟客戶端");
Thread thread1 = new Thread() {//使用多線程方法來實行收發,線程1負責接收信息
@Override
public void run() {
try {
InputStream inputStream = socket.getInputStream();//獲取socket輸入流
DataInputStream dataInputStream = new DataInputStream(inputStream);
//把輸入流封裝在DataInputStream
while (true) {
String msg = dataInputStream.readUTF();//使用readUTF讀取字符串
System.out.println("接收服務端消息: " + msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
Thread thread2 = new Thread() {//線程2用來發送消息
@Override
public void run() {
try {
OutputStream outputStream = socket.getOutputStream();
//打開輸出流
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
//把輸出流封裝在DataOutputStream中
Scanner scanner = new Scanner(System.in);
while (true) {
String str = scanner.next();
dataOutputStream.writeUTF(str);//使用writeUTF發送字符串
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
thread1.start();
thread2.start();
thread1.join();
System.out.println("客戶端關閉");
socket.close();//關閉這個socket
} catch (Exception e) {
System.out.println("斷開連接");
}
}
}
關于“java程序間怎么進行通信”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。