十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
套接字 Socket
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了黃州免費(fèi)建站歡迎大家使用!
import java.net.*;
Server:
ServerSocket server=new ServerSocket(port);//port是端口
Socket socket=server.accept();
//等待客戶(hù)機(jī)的連接請(qǐng)求,若連接,則創(chuàng)建一套接字,并將返回。
Client:
Socket socket=new Socket("host",port);//host主機(jī)名(本機(jī):127.0.0.1)
程序分Server和Client
服務(wù)器端打開(kāi)偵聽(tīng)的端口,一有客戶(hù)端連接就創(chuàng)建兩個(gè)新的線(xiàn)程來(lái)負(fù)責(zé)這個(gè)連接
一個(gè)負(fù)責(zé)客戶(hù)端發(fā)送的信息(ClientMsgCollectThread 類(lèi)),
另一個(gè)負(fù)責(zé)通過(guò)該Socket發(fā)送數(shù)據(jù)(ServerMsgSendThread )
Server.java代碼如下:
/*
* 創(chuàng)建日期 2009-3-7
*
* TODO 要更改此生成的文件的模板,請(qǐng)轉(zhuǎn)至
* 窗口 - 首選項(xiàng) - Java - 代碼樣式 - 代碼模板
*/
package faue.MutiUser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服務(wù)器端
*
* @author Faue
*/
public class Server extends ServerSocket {
private static final int SERVER_PORT = 10000;
/**
* 構(gòu)造方法,用于實(shí)現(xiàn)連接的監(jiān)聽(tīng)
*
* @throws IOException
*/
public Server() throws IOException {
super(SERVER_PORT);
try {
while (true) {
Socket socket = super.accept();
new Thread(new ClientMsgCollectThread(socket), "getAndShow"
+ socket.getPort()).start();
new Thread(new ServerMsgSendThread(socket), "send"
+ socket.getPort()).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
new Server();
}
/**
* 該類(lèi)用于創(chuàng)建接收客戶(hù)端發(fā)來(lái)的信息并顯示的線(xiàn)程
*
* @author Faue
* @version 1.0.0
*/
class ClientMsgCollectThread implements Runnable {
private Socket client;
private BufferedReader in;
private StringBuffer inputStringBuffer = new StringBuffer("Hello");
/**
* 得到Socket的輸入流
*
* @param s
* @throws IOException
*/
public ClientMsgCollectThread(Socket s) throws IOException {
client = s;
in = new BufferedReader(new InputStreamReader(client
.getInputStream(), "GBK"));
}
public void run() {
try {
while (!client.isClosed()) {
inputStringBuffer.delete(0, inputStringBuffer.length());
inputStringBuffer.append(in.readLine());
System.out.println(getMsg(inputStringBuffer.toString()));
}
} catch (IOException e) {
//e.printStackTrace();
System.out.println(client.toString() + " is closed!");
}
}
/**
* 構(gòu)造顯示的字符串
*
* @param line
* @return
*/
private String getMsg(String line) {
return client.toString() + " says:" + line;
}
}
/**
* 該類(lèi)用于創(chuàng)建發(fā)送數(shù)據(jù)的線(xiàn)程
*
* @author Faue
* @version 1.0.0
*/
class ServerMsgSendThread implements Runnable {
private Socket client;
private PrintWriter out;
private BufferedReader keyboardInput;
private StringBuffer outputStringBuffer = new StringBuffer("Hello");
/**
* 得到鍵盤(pán)的輸入流
*
* @param s
* @throws IOException
*/
public ServerMsgSendThread(Socket s) throws IOException {
client = s;
out = new PrintWriter(client.getOutputStream(), true);
keyboardInput = new BufferedReader(new InputStreamReader(System.in));
}
public void run() {
try {
while (!client.isClosed()) {
outputStringBuffer.delete(0, outputStringBuffer.length());
outputStringBuffer.append(keyboardInput.readLine());
out.println(outputStringBuffer.toString());
}
} catch (IOException e) {
//e.printStackTrace();
System.out.println(client.toString() + " is closed!");
}
}
}
}
客戶(hù)端:
實(shí)現(xiàn)基于IP地址的連接,連接后也創(chuàng)建兩個(gè)線(xiàn)程來(lái)實(shí)現(xiàn)信息的發(fā)送和接收
/*
* 創(chuàng)建日期 2009-3-7
*
*/
package faue.MutiUser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 客戶(hù)端
*
* @author Faue
*/
public class Client {
private Socket mySocket;
/**
* 創(chuàng)建線(xiàn)程的構(gòu)造方法
*
* @param IP
* @throws IOException
*/
public Client(String IP) throws IOException {
try {
mySocket = new Socket(IP, 10000);
new Thread(new ServerMsgCollectThread(mySocket), "getAndShow"
+ mySocket.getPort()).start();
new Thread(new ClientMsgSendThread(mySocket), "send"
+ mySocket.getPort()).start();
} catch (IOException e) {
//e.printStackTrace();
System.out.println("Server.IP:" + IP
+ " port:10000 can not be Connected");
}
}
public static void main(String[] args) throws IOException {
try {
new Client(args[0]);
} catch (Exception e) {
System.out.println("輸入的IP地址錯(cuò)誤");
}
}
/**
* 該類(lèi)用于創(chuàng)建接收服務(wù)端發(fā)來(lái)的信息并顯示的線(xiàn)程
*
* @author Faue
* @version 1.0.0
*/
class ServerMsgCollectThread implements Runnable {
private Socket client;
private BufferedReader in;
private StringBuffer inputStringBuffer = new StringBuffer("Hello");
/**
* 得到Socket的輸入流
*
* @param s
* @throws IOException
*/
public ServerMsgCollectThread(Socket s) throws IOException {
client = s;
in = new BufferedReader(new InputStreamReader(client
.getInputStream(), "GBK"));
}
public void run() {
try {
while (!client.isClosed()) {
inputStringBuffer.delete(0, inputStringBuffer.length());
inputStringBuffer.append(in.readLine());
System.out.println(getMsg(inputStringBuffer.toString()));
}
} catch (IOException e) {
//e.printStackTrace();
System.out.println(client.toString() + " is closed!");
System.exit(0);
}
}
/**
* 構(gòu)造輸入字符串
*
* @param line
* @return
*/
private String getMsg(String line) {
return client.toString() + " says:" + line;
}
}
/**
* 該類(lèi)用于創(chuàng)建發(fā)送數(shù)據(jù)的線(xiàn)程
*
* @author Faue
* @version 1.0.0
*/
class ClientMsgSendThread implements Runnable {
private Socket client;
private PrintWriter out;
private BufferedReader keyboardInput;
private StringBuffer outputStringBuffer = new StringBuffer("Hello");
/**
* 得到鍵盤(pán)的輸入流
*
* @param s
* @throws IOException
*/
public ClientMsgSendThread(Socket s) throws IOException {
client = s;
out = new PrintWriter(client.getOutputStream(), true);
keyboardInput = new BufferedReader(new InputStreamReader(System.in));
}
public void run() {
try {
while (!client.isClosed()) {
outputStringBuffer.delete(0, outputStringBuffer.length());
outputStringBuffer.append(keyboardInput.readLine());
out.println(outputStringBuffer.toString());
}
out.println("--- See you, bye! ---");
} catch (IOException e) {
//e.printStackTrace();
System.out.println(client.toString() + " is closed!");
System.exit(0);
}
}
}
}
如果對(duì)您有幫助,請(qǐng)記得采納為滿(mǎn)意答案,謝謝!祝您生活愉快!
vaela
soapenv:Header/
soapenv:Body
api:getEmp
shopIdstring/shopId
/api:getEmp
/soapenv:Body
/soapenv:Envelope
這個(gè)時(shí)SOAP協(xié)議的標(biāo)準(zhǔn)報(bào)文格式,客戶(hù)端只要發(fā)送這樣的報(bào)文給支持SOAP協(xié)議的webservice服務(wù)器即可成功調(diào)用web service服務(wù)
服務(wù)端:部署服務(wù)只需要自己定義服務(wù)的接口和實(shí)現(xiàn)類(lèi),并用@webservice注解,通過(guò)endPoint類(lèi)直接發(fā)布即可
package?socket;
import?java.io.BufferedReader;
import?java.io.IOException;
import?java.io.InputStreamReader;
import?java.io.PrintWriter;
import?java.net.ServerSocket;
import?java.net.Socket;
public?class?SocketService?{
//搭建服務(wù)器端
public?static?void?main(String[]?args)?throws?IOException{
SocketService?socketService?=?new?SocketService();
//1、a)創(chuàng)建一個(gè)服務(wù)器端Socket,即SocketService?
socketService.oneServer();
}
public??void?oneServer(){
try{
ServerSocket?server=null;
try{
server=new?ServerSocket(5209);
//b)指定綁定的端口,并監(jiān)聽(tīng)此端口。
System.out.println("服務(wù)器啟動(dòng)成功");
//創(chuàng)建一個(gè)ServerSocket在端口5209監(jiān)聽(tīng)客戶(hù)請(qǐng)求
}catch(Exception?e)?{
System.out.println("沒(méi)有啟動(dòng)監(jiān)聽(tīng):"+e);
//出錯(cuò),打印出錯(cuò)信息
}
Socket?socket=null;
try{
socket=server.accept();
//2、調(diào)用accept()方法開(kāi)始監(jiān)聽(tīng),等待客戶(hù)端的連接?
//使用accept()阻塞等待客戶(hù)請(qǐng)求,有客戶(hù)
//請(qǐng)求到來(lái)則產(chǎn)生一個(gè)Socket對(duì)象,并繼續(xù)執(zhí)行
}catch(Exception?e)?{
System.out.println("Error."+e);
//出錯(cuò),打印出錯(cuò)信息
}
//3、獲取輸入流,并讀取客戶(hù)端信息?
String?line;
BufferedReader?in=new?BufferedReader(new?InputStreamReader(socket.getInputStream()));
//由Socket對(duì)象得到輸入流,并構(gòu)造相應(yīng)的BufferedReader對(duì)象
PrintWriter?writer=new?PrintWriter(socket.getOutputStream());
//由Socket對(duì)象得到輸出流,并構(gòu)造PrintWriter對(duì)象
BufferedReader?br=new?BufferedReader(new?InputStreamReader(System.in));
//由系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備構(gòu)造BufferedReader對(duì)象
System.out.println("Client:"+in.readLine());
//在標(biāo)準(zhǔn)輸出上打印從客戶(hù)端讀入的字符串
line=br.readLine();
//從標(biāo)準(zhǔn)輸入讀入一字符串
//4、獲取輸出流,響應(yīng)客戶(hù)端的請(qǐng)求?
while(!line.equals("end")){
//如果該字符串為?"bye",則停止循環(huán)
writer.println(line);
//向客戶(hù)端輸出該字符串
writer.flush();
//刷新輸出流,使Client馬上收到該字符串
System.out.println("Server:"+line);
//在系統(tǒng)標(biāo)準(zhǔn)輸出上打印讀入的字符串
System.out.println("Client:"+in.readLine());
//從Client讀入一字符串,并打印到標(biāo)準(zhǔn)輸出上
line=br.readLine();
//從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串
}?//繼續(xù)循環(huán)
//5、關(guān)閉資源?
writer.close();?//關(guān)閉Socket輸出流
in.close();?//關(guān)閉Socket輸入流
socket.close();?//關(guān)閉Socket
server.close();?//關(guān)閉ServerSocket
}catch(Exception?e)?{//出錯(cuò),打印出錯(cuò)信息
System.out.println("Error."+e);
}
}
}