1、TCP伺服器性能如何測試?
1 可以用專用工具測試,例如:
Netperf(www.netperf.org):網路性能測試。主要針對基於TCP或
UDP的傳輸。Netperf根據應用的不同,可以進行不同模式的網路性能測試,即批量數據傳輸(bulk data
transfer)模式和請求/應答(request/reponse)模式。Netperf測試結果所反映的是一個系統能夠以多快的速度向另外一個系統
發送數據,以及另外一個系統能夠以多塊的速度接收數據。Netperf工具以client/server方式工作。
server端是netserver,用來偵聽來自client端的連接,client端是 netperf,用來向server發起網路測試。
2 自己寫代碼測試,參考:
http://kmplayer.iteye.com/blog/673226。
2、tcp client和tcp server的區別
1、TCP和UDP都屬於socket通信協議,前者是以100個數據流的方式進行通信,後者是以數據包的方式進行通信。
2、TCP是有向連接協議,UDP是無向連接協議。
3、當tcpclient和伺服器建立連接時,它們需要三個握手協議。UDP不需要握手,直接發送數據包。
4、TCP通信不會丟失數據,UDP通信會丟失數據包。
5、在通信可靠性方面,TCP比UDP更可靠。
6、安全性上,TCP安全保密要比UDP高。
7、TServerSocket/TClientSocket,是兼容的消息通知的非阻塞非同步模式。
(2)tcp伺服器擴展資料:
在使用TCP通訊建立連接時採用客戶端伺服器模式,這種模式又常常被稱為主從式架構,簡稱為C/S結構,屬於一種網路通訊架構,將通訊的雙方以客戶端(Client )與伺服器 (Server) 的身份區分開來。
使用C/S結構的通信常見的還有S7通信, ISO-on-TCP通信。
伺服器的特徵:被動角色,等待來自客戶端的連接請求,處理請求並回傳結果。
客戶端的特徵:主動角色,發送連接請求,等待伺服器的響應。
3、TCP伺服器是什麼
TCP指的是傳輸控制協議。它是一種面向連接導向的、可靠地及基於位元組流的運輸層通信協議。而在接觸TCP中還有UDP,UDP也是一項重要的傳輸協議。TCP提供超時重發,丟棄重復數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端
1、提供IP環境下的數據可靠傳輸(一台計算機發出的位元組流會無差錯的發往網路上的其他計算機,而且計算機A接收數據包的時候,也會向計算機B回發數據包,這也會產生部分通信量),有效流控,全雙工操作(數據在兩個方向上能同時傳遞),多路復用服務,是面向連接,端到端的傳輸;
2、面向連接:正式通信前必須要與對方建立連接。事先為所發送的數據開辟出連接好的通道,然後再進行數據發送,就像打電話。
3、TCP支持的應用協議:FTP 文件傳送、RLogin 遠程登錄、SMTP POP3 電子郵件、NFS 網路文件系統、遠程列印、遠程執行、名字伺服器終端伺服器等服務類型。
4、求tcp socket 客戶端的伺服器端的區別
服務在連接前監聽,客戶端主動發起連接,就著點區別。連接上後,兩者對等
5、怎麼使用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錯誤。
6、TCP/IP 使用Socket 實現客戶端與伺服器端通信
對於伺服器,你先創建一個套接字(socket),然後bind綁定一個套接地址,然後你在用listen,此時你的伺服器會一直阻塞在這,處於監聽狀態,檢查是否有客戶端來connect,一旦有的話,你的伺服器就會accept。
所以,是你的伺服器是處於監聽狀態,監聽是否有客戶端,然後由客戶端來連接伺服器,伺服器接受客戶端的連接,而不是伺服器去連接客戶端。
7、tcp伺服器和tcp客戶端的區別
首先要確保兩機器能互相ping通(網路確實暢通才)服務端綁定IP估計用127
8、終端和伺服器有什麼區別?
終端不只是外設,而終端伺服器一般是一個設備,而非一個軟體
補充回復:
也算是一種終端伺服器吧!
伺服器(server)和終端(terminal)是基於網路環境工作的設備類型通稱,它們通常由各種計算機擔任。
(1)伺服器
伺服器是網路中的一種高性能計算機,為與之相連的各類終端設備(包括計算機)提供服務,它相當於網路的控制中心與服務中心。伺服器的性能對網路的性能起著關鍵性的作用,要求伺服器數據處理能力強,能接受大流量的數據訪問;具有高穩定性與可靠性,系統功能完善並能保證數據安全等。
(2)終端
終端是一種通過網路連接在伺服器上,能防問伺服器上的程序和數據或網路中的其它設備的計算機。隨著網路的發展,「終端」含義有了新的擴展,它泛指網路中一切由最終用戶使用的設備,如個人電腦、網路電視、wap手機、pda、atm自動取款機等
9、怎樣在自己電腦上建立一個TCP伺服器
在自己電腦上建立一個TCP伺服器的方法如下:
1、 創建一個ServerSocket;
2、從ServerSocket接受客戶連接請求;
3、創建一個服務線程處理新的連接;
4、在服務線程中,從socket中獲得I/O流;
5、對I/O流進行讀寫操作,完成與客戶的交互;
6、關閉I/O流;
7、關閉Socket。
創建一個ServerSocket的方法如下:
ServerSocket server = new ServerSocket(post)
Socket connection = server.accept();
ObjectInputStream put=new ObjectInputStream(connection.getInputStream());
ObjectOutputStreamoput=newObjectOutputStream(connection.getOutputStream())。
10、1.一個TCP伺服器用來和n個客戶端同步相連,需要多少個socket?
你好;1:與N個客戶端相連的話;伺服器都有一個對應的socket;也就是N個
2:為什麼TCP的C/S應用中,伺服器程序要先於客戶端程序執行 因為客戶端要連接伺服器之前先要知道伺服器的IP地址和埠號 而且這個埠號是處於監聽狀態的;如果伺服器不先啟動 那麼也不可能綁定這個埠號 客戶端根本連接不上
而UDP的C/S應用中,客戶端程序先於伺服器程序執行?
如果是通過UDP協議的話;這個沒有伺服器和客戶端之分 是相對獨立的個體;如果我是客戶端;我只要開啟一個埠 綁定這個埠 那麼人家知道我的IP地址和這個埠號 可以直接發信息給我 不用連接我;反之對方也一樣 希望能幫到你