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地址和这个端口号 可以直接发信息给我 不用连接我;反之对方也一样 希望能帮到你