java連接伺服器
Ⅰ java怎麼知道客戶端連接伺服器
java socket就可以完成
Ⅱ java.net.connectexception無法連接至伺服器
出現這個問題的原因,就是連接遠程服務的網路不通或者是埠有問題導致的。
問題原因排查:
第一步:在黑窗口中輸入 :ping ip是否連通;如果沒問題進行第二步。
第二步:在黑窗口中輸入:telnet ip 埠,查看埠是否可以訪問,如果沒問題進行第三步。
第三步:在黑窗口輸入:ping 地址(此地址就是conn的地址)。
備註:以上三步肯定能夠排查出問題原因的。如果還是不行,那麼就是代碼編寫的有問題。
Ⅲ 如何用Java實現Web伺服器
如何用Java實現Web伺服器 一、HTTP協議的作用原理
WWW是以Internet作為傳輸媒介的一個應用系統,WWW網上最基本的傳輸單位是Web網頁。WWW的工作基於客戶機/伺服器計算模型,由Web 瀏覽器(客戶機)和Web伺服器(伺服器)構成,兩者之間採用超文本傳送協議(HTTP)進行通信。HTTP協議是基於TCP/IP協議之上的協議,是Web瀏覽器和Web伺服器之間的應用層協議,是通用的、無狀態的、面向對象的協議。HTTP協議的作用原理包括四個步驟:
(1) 連接:Web瀏覽器與Web伺服器建立連接,打開一個稱為socket(套接字)的虛擬文件,此文件的建立標志著連接建立成功。
(2) 請求:Web瀏覽器通過socket向Web伺服器提交請求。HTTP的請求一般是GET或POST命令(POST用於FORM參數的傳遞)。GET命令的格式為:
GET 路徑/文件名 HTTP/1.0
文件名指出所訪問的文件,HTTP/1.0指出Web瀏覽器使用的HTTP版本。
(3) 應答:Web瀏覽器提交請求後,通過HTTP協議傳送給Web伺服器。Web伺服器接到後,進行事務處理,處理結果又通過HTTP傳回給Web瀏覽器,從而在Web瀏覽器上顯示出所請求的頁面。
Ⅳ 怎麼用java代碼連接到伺服器
用Socket類去連接
String ip = "192.168.0.57";
int port=7000;
InputStream in;
OutputStream out;
Socket sock = null;
try {
sock = new Socket(ip,port);
sock.setSoTimeout(60*1000);//設置超時
this.in = sock.getInputStream();
this.out = sock.getOutputStream();
} catch (Exception e) {
throw new Exception("與終端連接失敗!");
}
Ⅳ 怎麼用java程序連接NTP伺服器
Java軟體包內在支持的網路協議為TCP/IP,也是當今最流行的廣域網/區域網協議。Java有關網路的類及介面定義在java.net包中。客戶端軟體通常使用 java.net包中的核心類Socket與伺服器的某個埠建立連接,而伺服器程序不同於客戶機,它需要初始化一個埠進行監聽,遇到連接呼叫,才與相應的客戶機建立連接。Java.net包的ServerSocket類包含了編寫伺服器系統所需的一切。下面給出ServerSocket類的部分定義。
public class ServerSocket {
public ServerSocket(int port)
throws IOException ;
public Socket accept() throws IOException ;
public InetAddress getInetAddress() ;
public int getLocalPort() ;
public void close() throws IOException ;
public synchronized void setSoTimeout
(int timeout) throws SocketException ;
public synchronized int
getSoTimeout() throws IOException ;
}
ServerSocket 構造器是伺服器程序運行的基礎,它將參數port指定的埠初始化作為該伺服器的埠,監聽客戶機連接請求。Port的范圍是0到65536,但0到 1023是標准Internet協議保留埠,而且在Unix主機上,這些埠只有root用戶可以使用。一般自定義的埠號在8000到16000之間。僅初始化了ServerSocket還是遠遠不夠的,它沒有同客戶機交互的套接字(Socket),因此需要調用該類的accept方法接受客戶呼叫。Accept()方法直到有連接請求才返回通信套接字(Socket)的實例。通過這個實例的輸入、輸出流,伺服器可以接收用戶指令,並將相應結果回應客戶機。ServerSocket類的getInetAddress和getLocalPort方法可得到該伺服器的IP地址和埠。 setSoTimeout和getSoTimeout方法分別是設置和得到伺服器超時設置,如果伺服器在timout設定時間內還未得到accept方法返回的套接字實例,則拋出IOException的異常。
Java的多線程可謂是Java編程的精華之一,運用得當可以極大地改善程序的響應時間,提高程序的並行性。在伺服器程序中,由於往往要接收不同客戶機的同時請求或命令,因此可以對每個客戶機的請求生成一個命令處理線程,同時對各用戶的指令作出反應。在一些較復雜的系統中,我們還可以為每個資料庫查詢指令生成單獨的線程,並行對資料庫進行操作。實踐證明,採用多線程設計可以很好的改善系統的響應,並保證用戶指令執行的獨立性。由於Java本身是"線程安全"的,因此有一條編程原則是能夠獨立在一個線程中完成的操作就應該開辟一個新的線程。
Java中實現線程的方式有兩種,一是生成Thread類的子類,並定義該子類自己的run方法,線程的操作在方法run中實現。但我們定義的類一般是其他類的子類,而Java又不允許多重繼承,因此第二種實現線程的方法是實現Runnable介面。通過覆蓋Runnable介面中的run方法實現該線程的功能。本文例子採用第一種方法實現線程。
二、多線程伺服器程序舉例
以下是我們在項目中採用的多線程伺服器程序的架構,可以在此基礎上對命令進行擴充。本例未涉及資料庫。如果在線程運行中需要根據用戶指令對資料庫進行更新操作,則應注意線程間的同步問題,使同一更新方法一次只能由一個線程調用。這里我們有兩個類,receiveServer包含啟動代碼(main()),並初始化ServerSocket的實例,在accept方法返回用戶請求後,將返回的套接字(Socket)交給生成的線程類serverThread 的實例,直到該用戶結束連接。
//類receiveServer
import java.io.*;
import java.util.*;
import java.net.*;
public class receiveServer{
final int RECEIVE_PORT=9090;
//該伺服器的埠號
//receiveServer的構造器
public receiveServer() {
ServerSocket rServer=null;
//ServerSocket的實例
Socket request=null; //用戶請求的套接字
Thread receiveThread=null;
try{
rServer=new ServerSocket(RECEIVE_PORT);
//初始化ServerSocket
System.out.println("Welcome to the server!");
System.out.println(new Date());
System.out.println("The server is ready!");
System.out.println("Port: "+RECEIVE_PORT);
while(true){ //等待用戶請求
request=rServer.accept();
//接收客戶機連接請求
receiveThread=new serverThread(request);
//生成serverThread的實例
receiveThread.start();
//啟動serverThread線程
}
}catch(IOException e){
System.out.println(e.getMessage());}
}
public static void main(String args[]){
new receiveServer();
} //end of main
} //end of class
//類serverThread
import java.io.*;
import java.net.*;
class serverThread extends Thread {
Socket clientRequest;
//用戶連接的通信套接字
BufferedReader input; //輸入流
PrintWriter output; //輸出流
public serverThread(Socket s)
{ //serverThread的構造器
this.clientRequest=s;
//接收receiveServer傳來的套接字
InputStreamReader reader;
OutputStreamWriter writer;
try{ //初始化輸入、輸出流
reader=new InputStreamReader
(clientRequest.getInputStream());
writer=new OutputStreamWriter
(clientRequest.getOutputStream());
input=new BufferedReader(reader);
output=new PrintWriter(writer,true);
}catch(IOException e){
System.out.println(e.getMessage());}
output.println("Welcome to the server!");
//客戶機連接歡迎詞
output.println("Now is:
"+new java.util.Date()+" "+
"Port:"+clientRequest.getLocalPort());
output.println("What can I do for you?");
}
public void run(){ //線程的執行方法
String command=null; //用戶指令
String str=null;
boolean done=false;
while(!done){
try{
str=input.readLine(); //接收客戶機指令
}catch(IOException e){
System.out.println(e.getMessage());}
command=str.trim().toUpperCase();
if(str==null || command.equals("QUIT"))
//命令quit結束本次連接
done=true;
else if(command.equals("HELP")){
//命令help查詢本伺服器可接受的命令
output.println("query");
output.println("quit");
output.println("help");
}
else if(command.startsWith("QUERY"))
{ //命令query
output.println("OK to query something!");
}
//else if …….. //在此可加入伺服器的其他指令
else if(!command.startsWith("HELP") &&
!command.startsWith("QUIT") &&
!command.startsWith("QUERY")){
output.println("Command not Found!
Please refer to the HELP!");
}
}//end of while
try{
clientRequest.close(); //關閉套接字
}catch(IOException e){
System.out.println(e.getMessage());
}
command=null;
}//end of run
啟動該伺服器程序後,可用telnet machine port命令連接,其中machine為本機名或地址,port為程序中指定的埠。也可以編寫特定的客戶機軟體通過TCP的Socket套接字建立連接
首先您需要保證您本地Java項目是可以聯網的,然後在mysql的連接中輸入阿里雲伺服器的地址以及資料庫名和密碼就行。
Ⅶ java中如何實現多個客戶端與伺服器連接
伺服器端可以採用多線程處理客戶請求,例如:
package threadPool;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolServer {
private int port = 8000;
private ServerSocket serverSocket;
private ExecutorService executorService; //線程池
private final int POOL_SIZE = 4; //單個CPU時線程池中的工作線程數目
public ThreadPoolServer() throws IOException{
serverSocket = new ServerSocket(port);
//創建線程池
//Runtime 的availableProcessors()方法返回當前系統CPU的數目
//系統CPU越多,線程池中的工作線程數目越多
executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
System.out.println("伺服器已啟動!!");
}
public void service(){
while(true){
Socket socket = null;
try{
socket = serverSocket.accept();
executorService.execute(new Handler(socket));
}catch(IOException e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
new ThreadPoolServer().service();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Handler implements Runnable {
private Socket socket;
public Handler(Socket socket) {
this.socket = socket;
}
private PrintWriter getWriter(Socket socket) throws IOException {
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut, true);
}
private BufferedReader getReader(Socket socket) throws IOException {
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public String echo(String msg) {
return "echo:" + msg;
}
@Override
public void run() {
try {
System.out.println("New connection accepted:" + socket.getInetAddress() + ":" + socket.getPort());
BufferedReader br = getReader(socket);
PrintWriter pw = getWriter(socket);
String msg = null;
while ((msg = br.readLine()) != null) {
System.out.println(msg);
pw.println(echo(msg));
if (msg.equals("bye")) {
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Ⅷ 怎麼用java代碼連接到伺服器
首先就肯定要知道ServerSocket,服務端的服務埠以及伺服器的地址。
然後再用 Socket socket=new Socket(port,address);
最後,如果你需要接收數據之類的,就用socket.getInputStream(),發送數據用socket.getOutputStream()
Ⅸ java怎麼連接thrift伺服器
package net.johnc.thrift;
import org.apache.thrift.TException;
public class TestImpl implements Test.Iface {
public void ping(int length) throws TException {
System.out.println("calling ping ,length=" + length);
}
}