套接字 Socket
網站建設哪家好,找創(chuàng)新互聯(lián)!專注于網頁設計、網站建設、微信開發(fā)、重慶小程序開發(fā)、集團企業(yè)網站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了黃州免費建站歡迎大家使用!
import java.net.*;
Server:
ServerSocket server=new ServerSocket(port);//port是端口
Socket socket=server.accept();
//等待客戶機的連接請求,若連接,則創(chuàng)建一套接字,并將返回。
Client:
Socket socket=new Socket("host",port);//host主機名(本機:127.0.0.1)
程序分Server和Client
服務器端打開偵聽的端口,一有客戶端連接就創(chuàng)建兩個新的線程來負責這個連接
一個負責客戶端發(fā)送的信息(ClientMsgCollectThread 類),
另一個負責通過該Socket發(fā)送數(shù)據(jù)(ServerMsgSendThread )
Server.java代碼如下:
/*
* 創(chuàng)建日期 2009-3-7
*
* TODO 要更改此生成的文件的模板,請轉至
* 窗口 - 首選項 - 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;
/**
* 服務器端
*
* @author Faue
*/
public class Server extends ServerSocket {
private static final int SERVER_PORT = 10000;
/**
* 構造方法,用于實現(xiàn)連接的監(jiān)聽
*
* @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();
}
/**
* 該類用于創(chuàng)建接收客戶端發(fā)來的信息并顯示的線程
*
* @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!");
}
}
/**
* 構造顯示的字符串
*
* @param line
* @return
*/
private String getMsg(String line) {
return client.toString() + " says:" + line;
}
}
/**
* 該類用于創(chuàng)建發(fā)送數(shù)據(jù)的線程
*
* @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");
/**
* 得到鍵盤的輸入流
*
* @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!");
}
}
}
}
客戶端:
實現(xiàn)基于IP地址的連接,連接后也創(chuàng)建兩個線程來實現(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;
/**
* 客戶端
*
* @author Faue
*/
public class Client {
private Socket mySocket;
/**
* 創(chuàng)建線程的構造方法
*
* @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地址錯誤");
}
}
/**
* 該類用于創(chuàng)建接收服務端發(fā)來的信息并顯示的線程
*
* @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);
}
}
/**
* 構造輸入字符串
*
* @param line
* @return
*/
private String getMsg(String line) {
return client.toString() + " says:" + line;
}
}
/**
* 該類用于創(chuàng)建發(fā)送數(shù)據(jù)的線程
*
* @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");
/**
* 得到鍵盤的輸入流
*
* @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);
}
}
}
}
如果對您有幫助,請記得采納為滿意答案,謝謝!祝您生活愉快!
vaela
soapenv:Header/
soapenv:Body
api:getEmp
shopIdstring/shopId
/api:getEmp
/soapenv:Body
/soapenv:Envelope
這個時SOAP協(xié)議的標準報文格式,客戶端只要發(fā)送這樣的報文給支持SOAP協(xié)議的webservice服務器即可成功調用web service服務
服務端:部署服務只需要自己定義服務的接口和實現(xiàn)類,并用@webservice注解,通過endPoint類直接發(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?{
//搭建服務器端
public?static?void?main(String[]?args)?throws?IOException{
SocketService?socketService?=?new?SocketService();
//1、a)創(chuàng)建一個服務器端Socket,即SocketService?
socketService.oneServer();
}
public??void?oneServer(){
try{
ServerSocket?server=null;
try{
server=new?ServerSocket(5209);
//b)指定綁定的端口,并監(jiān)聽此端口。
System.out.println("服務器啟動成功");
//創(chuàng)建一個ServerSocket在端口5209監(jiān)聽客戶請求
}catch(Exception?e)?{
System.out.println("沒有啟動監(jiān)聽:"+e);
//出錯,打印出錯信息
}
Socket?socket=null;
try{
socket=server.accept();
//2、調用accept()方法開始監(jiān)聽,等待客戶端的連接?
//使用accept()阻塞等待客戶請求,有客戶
//請求到來則產生一個Socket對象,并繼續(xù)執(zhí)行
}catch(Exception?e)?{
System.out.println("Error."+e);
//出錯,打印出錯信息
}
//3、獲取輸入流,并讀取客戶端信息?
String?line;
BufferedReader?in=new?BufferedReader(new?InputStreamReader(socket.getInputStream()));
//由Socket對象得到輸入流,并構造相應的BufferedReader對象
PrintWriter?writer=new?PrintWriter(socket.getOutputStream());
//由Socket對象得到輸出流,并構造PrintWriter對象
BufferedReader?br=new?BufferedReader(new?InputStreamReader(System.in));
//由系統(tǒng)標準輸入設備構造BufferedReader對象
System.out.println("Client:"+in.readLine());
//在標準輸出上打印從客戶端讀入的字符串
line=br.readLine();
//從標準輸入讀入一字符串
//4、獲取輸出流,響應客戶端的請求?
while(!line.equals("end")){
//如果該字符串為?"bye",則停止循環(huán)
writer.println(line);
//向客戶端輸出該字符串
writer.flush();
//刷新輸出流,使Client馬上收到該字符串
System.out.println("Server:"+line);
//在系統(tǒng)標準輸出上打印讀入的字符串
System.out.println("Client:"+in.readLine());
//從Client讀入一字符串,并打印到標準輸出上
line=br.readLine();
//從系統(tǒng)標準輸入讀入一字符串
}?//繼續(xù)循環(huán)
//5、關閉資源?
writer.close();?//關閉Socket輸出流
in.close();?//關閉Socket輸入流
socket.close();?//關閉Socket
server.close();?//關閉ServerSocket
}catch(Exception?e)?{//出錯,打印出錯信息
System.out.println("Error."+e);
}
}
}
分享文章:java實現(xiàn)服務端代碼 java服務器代碼
文章起源:http://muchs.cn/article30/doecspo.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供做網站、軟件開發(fā)、域名注冊、微信小程序、手機網站建設、全網營銷推廣
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)