導航:首頁 > IDC知識 > 伺服器通訊

伺服器通訊

發布時間:2020-09-22 20:39:03

1、什麼是客戶-伺服器通信方式?什麼是對等通信方式?兩者有什麼相同點與不同點?

客戶-伺服器方式是最常用的傳統方式,客戶是服務請求方,伺服器是服務提供方,可同時處理多個遠地或本地客戶的請求。
對等通信是兩台主機在通信時並不區分哪個是伺服器請求方還是服務提供方,只要兩台主機都運行了對等連接軟體,就可以平等的,對等連接通信。
相同的地方就是都能得到想要的服務,只不過前者可能速度較慢。

2、用HTML5做app的話,怎樣和伺服器進行通訊?

通常webapp與伺服器通信都是通過ajax或者直接提交表單來實現的。
1、Java後台伺服器打開HTTP所要請求的埠,進行偵聽。
2、HTML觸發HTTP鏈接請求,向後台Java伺服器發送HTTP請求。
3、Java伺服器解析請求,得知所要請求的是什麼內容。
4、Java後台伺服器將所要請求的內容准備好,並組建成HTTP格式(必須這樣,HTML頁面才能夠解析;直接回復,就無法解析)。
5、Java後台伺服器將組建好的HTTP結果消息發送給HTML頁面。
6、HTML頁面收到HTTP回復。
7、HTML頁面對HTTP回復信息解析。
8、HTTP頁面對解析的信息進行顯示。

3、伺服器 通訊埠

使用netstat -an命令即可得到所有連接和偵聽埠和以數字格式顯示地址和埠號

4、伺服器的UDP通訊是什麼?

用戶數據文報協議 (UDP) 是一個無連接協議。跟 TCP 的操作不同,計算機並不建立連接。另外 UDP 應用程序可以是客戶機,也可以是伺服器。

為了傳輸數據,首先要設置客戶計算機的 LocalPort 屬性。然後,伺服器計算機只需將 RemoteHost 設置為客戶計算機的 Internet 地址,並將 RemotePort 屬性設置為跟客戶計算機的 LocalPort 屬性相同的埠,並調用 SendData 方法來著手發送信息。於是,客戶計算機使用 DataArrival 事件內的 GetData 方法來獲取已發送的信息。

5、客戶端與伺服器通信,有哪些方法?

和虛擬主機的只能通過網頁的方式post或者get通訊傳輸數據
畢竟虛擬主機可以使用的功能有限,asp和php都可以實現你想要的功能
估計你是拿來做驗證的吧

6、怎麼使用TCP/IP與伺服器進行通信

使用流進行網路通信
使用socket進行網路編程的最簡單方式是使用NSStream。
NSStream類對流操作進行了抽象,包括對各種流數據的讀和寫:內存流、網路流或文件流。當然,通過NSStream也可以與伺服器進行通信。
無論是通過NSStream向伺服器寫數據,還是從NStream對象中讀取伺服器數據,都是一件簡單的事情。
在Mac OS X中,使用NSHost和NSStream與伺服器進行連接的代碼如下:

NSInputStream *iStream;
NSOutputStream *oStream;
uint portNo = 500;
NSURL *website = [NSURLURLWithString:urlStr];
NSHost *host = [NSHost hostWithName:[websitehost]]; [NSStream getStreamsToHost:host
port:portNo
inputStream:&iStream
outputStream:&oStream];
NSStream的getStreamsToHost:port:inputStream:outputStream:方法用於連接伺服器並創建一對輸入輸出流用於向伺服器讀寫數據。問題是iOS中並沒有這個方法。因此上述代碼無法用於iPhoneapp中。

解決這個問題,需要為NSStream增加新的類別以增加
getStreamToHost:Port:inputstream:outputStream:方法。在Xcode中新建文件
NSStreamAdditions.m。然後在NSStreamAdditions.h中編寫代碼如下:

@interface NSStream (MyAdditions)
+ (void)getStreamsToHostNamed:(NSString*)hostName
port:(NSInteger)port
inputStream:(NSInputStream **)inputStreamPtr
outputStream:(NSOutputStream **)outputStreamPtr;
@end

在NSStreamAdditions.m文件中加入下列代碼。
#import "NSStreamAdditions.h"

@implementation NSStream (MyAdditions)

+ (void)getStreamsToHostNamed:(NSString*)hostName
port:(NSInteger)port
inputStream:(NSInputStream **)inputStreamPtr
outputStream:(NSOutputStream **)outputStreamPtr
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;

assert(hostName != nil);
assert( (port > 0) && (port <65536) );
assert( (inputStreamPtr != NULL) ||(outputStreamPtr != NULL) );

readStream = NULL;
writeStream = NULL;

(
NULL,
(CFStringRef) hostName,
port,
((inputStreamPtr != nil) ?&readStream : NULL),
((outputStreamPtr != nil) ? &writeStream : NULL)
);

if (inputStreamPtr != NULL) {
*inputStreamPtr = [NSMakeCollectable(readStream)autorelease];
}
if (outputStreamPtr != NULL) {
*outputStreamPtr =[NSMakeCollectable(writeStream) autorelease];
}
}

@end

以上代碼為NSStream類增加了一個類方法叫做:
getStreamsToHostNamed:port:inputStream:outputStream:
現在你可以在iPhone app中,使用該方法了。

作者注:該類別代碼基於蘋果文檔 Apple』s Technical Q&A1652。
在NetworkViewController.m中,加入如下代碼:

#import "NetworkViewController.h"
#import "NSStreamAdditions.h"
@implementation NetworkViewController
NSMutableData *data;
NSInputStream *iStream;
NSOutputStream *oStream;
定義connectToServerUsingStream:portNo:方法如下。在方法中我們連接了伺服器並創建了一對輸入/輸出流:
-(void) connectToServerUsingStream:(NSString*)urlStr portNo: (uint) portNo {
if (![urlStrisEqualToString:@""]) {
NSURL *website =[NSURL URLWithString:urlStr];
if (!website) {
NSLog(@"%@ is not a valid URL");
return;
} else {
[NSStream getStreamsToHostNamed:urlStr
port:portNo
inputStream:&iStream
outputStream:&oStream];
[iStreamretain];
[oStream retain];
[iStreamsetDelegate:self];
[oStream setDelegate:self];
[iStream scheleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream scheleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStreamopen];
[iStream open];
}
}
}

方法中,我們將input和output放到了runloop中以便接收事件。這樣做,是為了防止流中沒有有效數據時代碼產生阻塞。input和
output的委託屬性都設置為self,因此我們還應該在NetworkViewController類中實現委託方法以便接收流數據。
使用 CFNetwork 進行網路通信
另一種TCP通信的方法是使用CFNetwork框架。CFNetwork屬於核心服務框架(C語言庫),提供了對HTTP、FTP、BSDsockets等網路協議的封裝。
為了演示如何使用CFNetwork框架,在NetworkViewController.m文件中加入如下語句:

#import "NetworkViewController.h"
#import "NSStreamAdditions.h"

@implementation NetworkViewController
NSMutableData *data;
NSInputStream *iStream;
NSOutputStream *oStream;
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
定義 connectToServerUsingCFStream:portNo: 方法如下:
-(void) connectToServerUsingCFStream:(NSString *)
urlStr portNo: (uint) portNo{
(kCFAllocatorDefault,
(CFStringRef) urlStr,
portNo,
&readStream,
&writeStream);
if (readStream &&writeStream){
CFReadStreamSetProperty(readStream,
,
kCFBooleanTrue);
CFWriteStreamSetProperty(writeStream,
,
kCFBooleanTrue);
iStream =(NSInputStream *)readStream;
[iStream retain];
[iStream setDelegate:self];
[iStreamscheleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[iStream open];
oStream = (NSOutputStream *)writeStream;
[oStreamretain];
[oStream setDelegate:self];
[oStream scheleInRunLoop:[NSRunLoopcurrentRunLoop]
forMode:NSDefaultRunLoopMode];
[oStream open];
}
}

先,我們使用()方法創建了一個到伺服器的TCP/IP連接,以及一對輸入輸出
流。然後將它們轉換為等價的O-C對象——NSInputStream和NSOutputStream。接下來跟前面一樣,設置delegate屬性並放
到runloop中運行。
發送數據
要想伺服器發送數據,請使用NSOutputStream對象:
-(void) writeToServer:(const uint8_t *) buf {
[oStream write:bufmaxLength:strlen((char*)buf)];
}
這段代碼發送了一個無符號整型數組到伺服器。
讀取數據
當伺服器有數據到達,stream:handleEvent:方法被觸發。因此我們只需在這個方法中讀取數據即可。
- (void)stream:(NSStream *)streamhandleEvent:(NSStreamEvent)eventCode {

switch(eventCode) {
case :
{
if (data == nil) {
data = [[NSMutableData alloc] init];
}
uint8_t buf[1024];
unsigned int len = 0;
len = [(NSInputStream *)stream read:buf maxLength:1024];
if(len) {
[data appendBytes:(const void *)buf length:len];
int bytesRead;
bytesRead += len;
} else {
NSLog(@"No data.");
}

NSString *str =[[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(str);
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Fromserver"
message:str
delegate:self
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
[alert release];

[str release];
[data release];
data = nil;
} break;
}
}
該方法有兩個參數。一個NSStream對象和一個NSStreamEvent常量。NSStreamEvent常量可能包含以下取值:
NSStreamEventNone -- 沒有任何事件
NSStreamEventOpenCompleted -- 流打開成功.
-- 此時流中有位元組待讀取
-- 此時可向流中寫入數據
NSStreamEventErrorOccurred -- 有錯誤發生
NSStreamEventEndEncountered -- 到達流的末尾
對於輸入流,你應當檢測 常量。在這里,我們從輸入流中讀取了數據並顯示在UIAlertView中。

stream:handleEvent:方法中,很容易檢查到連接錯誤。在本例中,如果
connectToServerUsingStream:portNo:方法連接伺服器失敗,則在stream:handleEvent方法將被調用並在
NSStreamEvent參數中傳遞一個NSStreamEventErrorOccured錯誤。

7、兩台伺服器之間怎麼通信

我說一種最簡單的方法:1、路由上映射80以及遠程埠給Web伺服器的80和遠程埠。2、路由上映射其他埠(如4489)給資料庫伺服器的遠程埠。這樣就解決了2台伺服器都需要遠程登陸的問題了。3、這2個機器,默認應該是走的內網路由方式連接,你就用內網IP把他們連接起來。

與伺服器通訊相關的知識