使命召唤4服务器ol进游戏的时候与大厅服务器失去连接怎么解决?以前不是这样的一点就能进

ios开发(10)
一、网络各个协议:TCP/IP、SOCKET、HTTP等
网络七层由下往上分别为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
其中物理层、数据链路层和网络层通常被称作媒体层,是网络工程师所研究的对象;
传输层、会话层、表示层和应用层则被称作主机层,是用户所面向和关心的内容。
http协议对应于应用层
tcp协议对应于传输层
ip协议对应于网络层
三者本质上没有可比性。&&何况HTTP协议是基于TCP连接的。
TCP/IP是传输层协议,主要解决数据如何在网络中传输;而HTTP是应用层协议,主要解决如何包装数据。
我 们在传输数据时,可以只使用传输层(TCP/IP),但是那样的话,由于没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用应用层 协议,应用层协议很多,有HTTP、FTP、TELNET等等,也可以自己定义应用层协议。WEB使用HTTP作传输层协议,以封装HTTP文本信息,然 后使用TCP/IP做传输层协议将它发送到网络上。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。
二、Http和Socket连接区别
相信不少初学手机联网开发的朋友都想知道Http与Socket连接究竟有什么区别,希望通过自己的浅显理解能对初学者有所帮助。
2.1、TCP连接
要想明白Socket连接,先要明白TCP连接。手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。
建立起一个TCP连接需要经过“三次握手”:
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连
接之前,TCP
连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客
户端交互,最终确定断开)
2.2、HTTP连接
HTTP协议即超文本传送协议(HypertextTransfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的
做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客
户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。
三、SOCKET原理
3.1、套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个
TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应
用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。
3.2 、建立socket连接
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行于服务器端,称为ServerSocket。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户
端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
3.3、SOCKET连接与TCP连接
创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。
3.4、Socket连接与HTTP连接
于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开。但在实际网络应用
中,客户端到服务器之间的通信往往需要穿越多个中间节点,例如路由器、网关、防火墙等,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致
Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态。
而HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步。此时若双方建立的是Socket连接,服务器就可以直接将数据传送给
客户端;若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以
保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。
这里我们使用Socket实现一个聊天室的功能,关于服务器这里的就不介绍了
一:再头文件中第一输入流和输出流和一个消息数组
@interfaceViewController (){
NSInputStream *_inputS//对应输入流
NSOutputStream *_outputS//对应输出流
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *inputViewC
@property (weak, nonatomic) IBOutlet UITableView *tableV
@property (nonatomic, strong) NSMutableArray *chatM//聊天消息数组
懒加载这个消息数组
-(NSMutableArray *)chatMsgs{
if(!_chatMsgs) {
_chatMsgs =[NSMutableArray array];
return_chatM
二:实现输入输出流的监听
-(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode{
NSLog(@&%@&,[NSThread currentThread]);
//NSStreamEventOpenCompleted = 1UL && 0,//输入输出流打开完成//NSStreamEventHasBytesAvailable = 1UL && 1,//有字节可读//NSStreamEventHasSpaceAvailable = 1UL && 2,//可以发放字节//NSStreamEventErrorOccurred = 1UL && 3,//连接出现错误//NSStreamEventEndEncountered = 1UL && 4//连接结束
switch(eventCode) {
caseNSStreamEventOpenCompleted:
NSLog(@&输入输出流打开完成&);
caseNSStreamEventHasBytesAvailable:
NSLog(@&有字节可读&);
[self readData];
caseNSStreamEventHasSpaceAvailable:
NSLog(@&可以发送字节&);
caseNSStreamEventErrorOccurred:
NSLog(@&连接出现错误&);
caseNSStreamEventEndEncountered:
NSLog(@&连接结束&);
//关闭输入输出流
[_inputStream close];
[_outputStream close];
//从主运行循环移除
[_inputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[_outputStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
三:链接服务器
1- (IBAction)connectToHost:(id)sender {
//1.建立连接
NSString *host =@&127.0.0.1&;
intport =12345;
//定义C语言输入输出流
CFReadStreamRef readS
CFWriteStreamRef writeS
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)host, port, &readStream, &writeStream);
//把C语言的输入输出流转化成OC对象
_inputStream = (__bridge NSInputStream *)(readStream);
_outputStream = (__bridge NSOutputStream *)(writeStream);
//设置代理
_inputStream.delegate=
_outputStream.delegate=
//把输入输入流添加到主运行循环
//不添加主运行循环 代理有可能不工作
[_inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[_outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
//打开输入输出流
[_inputStream open];
[_outputStream open];
- (IBAction)loginBtnClick:(id)sender {
//发送用户名和密码
//在这里做的时候,只发用户名,密码就不用发送
//如果要登录,发送的数据格式为 &iam:zhangsan&;
//如果要发送聊天消息,数据格式为 &msg:did you have dinner&;
//登录的指令11NSString *loginStr =@&iam:zhangsan&;
//把Str转成NSData
NSData *data =[loginStr dataUsingEncoding:NSUTF8StringEncoding];
[_outputStream write:data.bytes maxLength:data.length];
五:读取服务器数据
#pragmamark 读了服务器返回的数据
-(void)readData{
//建立一个缓冲区 可以放1024个字节
uint8_t buf[1024];
//返回实际装的字节数
NSInteger len = [_inputStream read:buf maxLength:sizeof(buf)];
//把字节数组转化成字符串
NSData *data =[NSData dataWithBytes:buf length:len];
//从服务器接收到的数据
NSString *recStr =[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@&%@&,recStr);
[self reloadDataWithText:recStr];
六:发送数据
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
NSString *text =textField.
NSLog(@&%@&,text);
//聊天信息
NSString *msgStr = [NSString stringWithFormat:@&msg:%@&,text];
//把Str转成NSData10NSData *data =[msgStr dataUsingEncoding:NSUTF8StringEncoding];
//刷新表格
[self reloadDataWithText:msgStr];
//发送数据
[_outputStream write:data.bytes maxLength:data.length];
//发送完数据,清空textField
textField.text =
returnYES;
七:实现数据的显示,并且每发送一次消息都会滚动到对应的位置
-(void)reloadDataWithText:(NSString *)text{
[self.chatMsgs addObject:text];
[self.tableView reloadData];
//数据多,应该往上滚动
NSIndexPath *lastPath = [NSIndexPath indexPathForRow:self.chatMsgs.count -1inSection:0];
[self.tableView scrollToRowAtIndexPath:lastPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
#pragmamark 表格的数据源
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
returnself.chatMsgs.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
staticNSString *ID =@&Cell&;
UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:ID];
cell.textLabel.text =self.chatMsgs[indexPath.row];
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
[self.view endEditing:YES];
八:监听键盘的改变
//监听键盘
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(kbFrmWillChange:) name:UIKeyboardWillChangeFrameNotificationobject:nil];
-(void)kbFrmWillChange:(NSNotification *)noti{
NSLog(@&%@&,noti.userInfo);
//获取窗口的高度
CGFloat windowH =[UIScreen mainScreen].bounds.size.
//键盘结束的Frm
CGRect kbEndFrm =[noti.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
//获取键盘结束的y值
CGFloat kbEndY =kbEndFrm.origin.y;
self.inputViewConstraint.constant = windowH -kbEndY;
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:15830次
排名:千里之外
原创:33篇
(1)(5)(8)(1)(21)IOS - socket 编程初体验 - 吃肉的核桃 - 推酷
IOS - socket 编程初体验 - 吃肉的核桃
#import &ViewController.h&
@interface ViewController () &NSStreamDelegate, UITextFieldDelegate, UITableViewDataSource&
&&& NSInputStream&&&&&& *_inputS&&&&& // 输入流
&&& NSOutputStream&&&&& *_outputS&&&& // 输出流
&&& NSMutableArray&&&&& *_dataL
@property (weak, nonatomic) IBOutlet UITextField *hostN
@property (weak, nonatomic) IBOutlet UITextField *portT
@property (weak, nonatomic) IBOutlet UITextField *nickNameT
@property (weak, nonatomic) IBOutlet UITextField *messageT
@property (weak, nonatomic) IBOutlet UITableView *tableV
@implementation ViewController
&通过Scoket可以实现所有的网络功能:包括:GET、POST、PUT、DELETE
&最主要的应用场景是:自定义的协议,编写自由的网络应用!
&==========================================================
&Socket 的难点:
&1. 因为所有的输入输出都是在一个代理方法中调用,随着自定义协议的复杂度的提高,
&&& 程序编写难度势必要大幅度提升。
&2. 多线程的处理!
&&& 示例代码中,输入流合输出流都添加到了主运行循环,如果应用过于复杂,将影响主线程程序的性能
&&& 因此,需要使用另外一个运行循环,专门管理输入输出流。
&&& 代理方法的工作是对数据的输入输出流进行“解析”,解析工作同样不需要影响到主线程的工作。
&多线程方面的处理,是Socket的一大难点!
&可以使用第三方框架!会在XMPP项目中隆重登场!
&============================================================
&程序员写程序最主要的目的是用来阅读的,捎带着把程序的功能给实现了。
&SSL 安全漏洞,goto fail。
- (void)viewDidLoad
&&& [super viewDidLoad];
&&& _dataList = [NSMutableArray array];
- (BOOL)textFieldShouldReturn:(UITextField *)textField
&&& // 确认真的输入了文字,再发送消息给服务器
&&& if (textField.text.length & 0) {
&&&&&&& // 发送登录消息
&&&&&&& NSString *msg = [NSString stringWithFormat:@&msg:%@&, textField.text];
&&&&&&& // 在网络上发送的是二进制数据
&&&&&&& NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
&&&&&&& // 发送数据,直接往输入流写数据
&&&&&&& [_outputStream write:data.bytes maxLength:data.length];
&&& return YES;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
&&& return _dataList.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
&&& static NSString *ID = @&Cell&;
&&& UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
&&& cell.textLabel.text = _dataList[indexPath.row];
#pragma mark - 私有方法
#pragma mark 连接到服务器
- (void)connectToServer:(NSString *)hostName port:(NSInteger)port
&&& // 要进行Socket开发,以下代码都是固定的
&&& // 设置网络
&&& CFReadStreamRef readS
&&& CFWriteStreamRef writeS
&&& // CF框架是C语言的框架,在OC中的Socet方法,C语言部分的代码,总共就5行
&&& // 此方法可以连接到服务器,并分配输入流和输出流的内存空间
&&& CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)hostName, port, &readStream, &writeStream);
&&& // 记录已经分配的输入流和输出流
&&& _inputStream = (__bridge NSInputStream *)readS
&&& _outputStream = (__bridge NSOutputStream *)writeS
&&& // 设置代理,监听输入流和输出流中的变化
&&& _inputStream.delegate =
&&& _outputStream.delegate =
&&& // Scoket是建立的长连接,需要将输入输出流添加到主运行循环
&&& // 如果不将流加入主运行循环,delegate拒绝工作
&&& [_inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
&&& [_outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
&&& // 打开输入流和输出流,准备开始文件读写操作
&&& [_inputStream open];
&&& [_outputStream open];
#pragma mark NSStream的代理方法
&NSStreamEventNone = 0,&&&&&&&&&&&&&&&&&&&&&&&& // 无事件
&NSStreamEventOpenCompleted = 1UL && 0,&&&&&&&& // 建立连接完成
&NSStreamEventHasBytesAvailable = 1UL && 1,&&&& // 有可读的字节,接收到了数据,可以读了
&NSStreamEventHasSpaceAvailable = 1UL && 2,&&&& // 可以使用输出流的空间,此时可以发送数据给服务器
&NSStreamEventErrorOccurred = 1UL && 3,&&&&&&&& // 发生错误
&NSStreamEventEndEncountered = 1UL && 4&&&&&&&& // 流结束事件,在此事件中负责做销毁工作
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
&&& NSLog(@&%d&, eventCode);
&&& switch (eventCode) {
&&&&&&& case NSStreamEventOpenCompleted:
&&&&&&&&&&& NSLog(@&连接完成&);
&&&&&&&&&&&
&&&&&&& case NSStreamEventHasBytesAvailable:
&&&&&&&&&&& NSLog(@&有可读字节&);
&&&&&&&&&&& // 读从服务器接收到得数据,从输入流中读取
&&&&&&&&&&& // 先开辟一段缓冲区以读取数据,用空间来换取程序的简单
&&&&&&&&&&& uint8_t buffer[1024];
&&&&&&&&&& &
&&&&&&&&&&& // read返回的是输入流缓冲区中实际存储的字节数
&&&&&&&&&&& NSInteger len = [_inputStream read:buffer maxLength:sizeof(buffer)];
&&&&&&&&&& &
&&&&&&&&&&& if (len & 0) { // 读到数据
&&&&&&&&&&&&&&& // 将buffer中的数据,转换成字符串,输出
&&&&&&&&&&&&&&& NSString *str = [[NSString alloc] initWithBytes:buffer length:len encoding:NSUTF8StringEncoding];
&&&&&&&&&&&&&& &
&&&&&&&&&&&&&&& // 将接收到的内容添加到数组
&&&&&&&&&&&&&&& [_dataList addObject:str];
&&&&&&&&&&&&&& &
&&&&&&&&&&&&&&& // 刷新表格
&&&&&&&&&&&&&&& [_tableView reloadData];
&&&&&&&&&&& }
&&&&&&&&&& &
&&&&&&&&&&&
&&&&&&& case NSStreamEventHasSpaceAvailable:
&&&&&&&&&&& NSLog(@&可以写入数据&);
&&&&&&&&&&&
&&&&&&& case NSStreamEventErrorOccurred:
&&&&&&&&&&& NSLog(@&发生错误&);
&&&&&&&&&&&
&&&&&&& case NSStreamEventEndEncountered:
&&&&&&&&&&& NSLog(@&流结束&);
&&&&&&&&&&& // 做善后工作
&&&&&&&&&&& // 关闭流的同时,将流从主运行循环中删除
&&&&&&&&&&& [aStream close];
&&&&&&&&&&& [aStream removeFromRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
&&&&&&& default:
&&&&&&&&&&&
#pragma mark - Action
#pragma mark 登录到聊天室
- (IBAction)login
&&& NSString *hostName = _hostName.
&&& NSInteger port = [_portText.text integerValue];
&&& [self connectToServer:hostName port:port];
&&& // 发送登录消息
&&& NSString *msg = [NSString stringWithFormat:@&iam:%@&, _nickNameText.text];
&&& // 在网络上发送的是二进制数据
&&& NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding];
&&& // 发送数据,直接往输入流写数据
&&& [_outputStream write:data.bytes maxLength:data.length];
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致OC Socket大法好 华硕RAMPAGE V Extreme评测
点击数:38106|回复数:92
X99作为一个旗舰级平台,它所搭配的Haswell-E处理器目前面对厂商和超频玩家似乎并不是那么友好,各主板厂商或多或少都在BIOS的超频功能上碰到问题,而华硕独家推出了OC Socket技术,修改了Intel LGA 2011-v3默认的针脚定义,号称能在超频上带来和别家不一样的提升。这次我们拿到了华硕ROG旗下的X99主板——RAMPAGE V Extreme(以下简称R5E),看看它到底是不是有传说中的那么神奇。
华硕R5E采用Intel X99芯片组,支持LGA 2011-v3 Haswell-E处理器,支持四通道DDR4内存,最大容量64GB,支持DDR4-3300的超频频率。华硕的ROG主板还是沿用红黑配色,从X58时代起到现在都未曾变过,R5E采用E-ATX板型,跟之前大多数ROG Extreme主板一样。
SATA接口:右侧8个SATA3.0全为原生,左侧两个SATA-Express,其中一个为X99芯片组原生的SATA口提供,另一个为Asmedia第三方芯片提供。
PCIE插槽:四条红色的在使用5960X、5930K时可组4路SLI、CF,但在使用5820K时第四条插槽将不可用,只能走3路。看来华硕是不希望显卡工作在PCIE3.0 x4的速度下,宁可保全显卡效能,也要划清产品定位。中间黑色的则一直是跑在PCIE2.0 x4速度,并且会与第三方SATA-Express、一个第三方USB3.0和PCIE1x插槽共享带宽。
在主板背面有标注40Lanes CPU(5960X和5930K)和28Lanes CPU(5820K)在使用多显卡时的各PCIE插槽使用情况。
背部IO接口部分,10个USB3.0,2个USB2.0,一个PS2键鼠接口,一个RJ45网络接口,一个三天线无线网卡,5.1声道音频接口及SPDIF光纤接口。另外最左侧的是清CMOS按钮和ROG Connect按钮。
华硕R5E细节部分
在24Pin供电后边藏着一个M.2接口,支持PCIE 3.0 4x的速度,支持最多110mm的设备。
主板超频功能部分,Debug LED、开关、复位按钮是最基本配备,此外还有PCIE插槽开关、Slow Mode开关、LN2模式跳线,三个按钮分别是黑色的MemOK内存复位、Retry按钮和Safe_Boot按钮。其中Retry按钮是在主板无法正常通过自检时直接再次尝试自检,而不需要去断电重开机,Safe_Boot按钮则可以在超频失败时自动以安全设置启动系统,并保留你的CMOS设置,在超频失败微调参数的时候很好用。
双BIOS设计,旁边是SoundStage按钮,可切换主板预设的声音模式。
8+4Pin的供电,之前我说过5960X加压超频之后满载可能会吃到12V 30A以上的电流,所以8Pin供电接头会非常热,插上8+4Pin分摊电流之后可缓解此问题。
位于SATA_Express接口旁边的KeyBot按钮,可在键盘插在背部IO接口中上方的USB2.0接口时激活,激活后可配合主板上的ROG芯片给键盘自定义一些快捷键,而不通过软件层面操作,节约硬件开销。
双BIOS切换按钮,切换之后当前BIOS背后的LED会发光。
华硕R5E板载芯片
华硕R5E声卡部分,也不免俗地加入了声卡强化设置,华硕将其称为SupremeFX 2014,而不同于以往的二代三代。不过看外观方案依然是Realtek ALC1150+ELNA音频电容的方案,加上Sonic SenseAmp、Sound Stage这类预置和自动判别功能,为用户自动选择最适合的音效,简化用户的设置,配合Sonic Radar II等软件辅助。所以华硕的优化不在音质本身,主要还是在整体应用的智能性上。
主板板载无线网卡已经有几年了,从最初不美观、干扰大的mini-PCIE式飞天线的做法进化到现在的背部IO接口捆绑做法,ASUS的板载无线网卡是较早使用后者的,R5E也不例外。R5E板载的无线网卡是Broadcom BCM94360,加上3天线的设计,可实现1300Mbps的802.11ac传输速率,并支持蓝牙4.0功能。
两颗Asmedia ASM1074 USB3.0 Hub芯片,实现X99原生接口一拖四个USB3.0功能。
Asmedia ASM106SE,吃2x PCIE 2.0带宽,提供一个第三方SATA-Express接口。
Asmedia ASM1042AE芯片提供额外的背部两个USB3.0接口。
Intel I218V网卡,很常见的板载网卡,配合CFOS流量包优先级调整软件达到和Killer网卡类似的优化网络延迟效果。
OC Socket与OC Panel简介
华硕的X99主板的Socket与别家不同,他们的RD通过研究,发现Haswell-E处理器背后一些原本没被使用的触点可以用上,加强电气性能,使得掉压情况减轻,这样就可以让CPU超的更高。不管Intel有没有预先给华硕资料,他们的工程师敢于尝试并且能做到这点,不得不让人佩服。
我们可以看到ASUS的OC Socket和普通的LGA 2011-v3 Socket针脚数不同,OC Socket针脚数更多,这里我们借用官方的图片对比。
华硕官方网站主要是针对液氮模式下,有OC Socket的帮助,CPU高电压下不会掉压这个特性做宣传。然而我们发现,借助OC Socket,CPU Ring频率可以在风冷下超到更高,猜测是由于Ringbus和Home Agent虽然是使用同步的时钟频率,但电压却是不同的,在LGA 2011-v3普通Socket上,只有Ringbus电压生效,而Home Agent电压被封印,所以我们在设置高Ring频率的时候会出现可以启动但会卡在自检最后然后断电的情况,只有OC Socket多出来的那些针脚才能破解这个封印。例如在普通LGA 2011-v3插槽上,Haswell-E处理器的Ring频率只能超到3.5-3.7G左右,而在OC Socket上,就能超到4.3G甚至更高,这将大幅提升四通道DDR4内存的性能。当然了,其他厂商要说华硕这样做不在Intel默认规范之内,如果因此烧毁CPU,Intel有权不负责,但具体情况如何,看来还得事情发生之后再说。
华硕现在已经为OC Socket申请专利保护,所以其他家想抄袭估计是不可能了,但是我多加一个废Pin避专利不行?别说我没教过你们……除此之外,华硕还在附件中附送X-Socket II挡板,可以让用户更换LGA 2011-v3的背板,以使用原本的LGA 1366散热器扣具,以及更方便固定液氮炮,类似的设计在R4E上就有出现过。
而OC Panel已经不是什么新东西了,在M6E的时候首次出现,它是一个带有快捷超频设置功能的手持仪器。
由于上级指示不许拆附件包,所以这里就没法给大家演示了,我再次借用官方图说明其内部结构。这个面板内部的功能个个都很逆天,首先就是Pause Switch,这个相当于停止时间的功能,可以无条件暂停系统时钟,让你调好频率、控制好温度之后再继续;其次就是VGA Hot Wire,可以配合ASUS ROG的显卡达到随意硬改电压的目的,并通过OC Panel设定电阻值来控制电压;再就是Slow Mode,可以直接控制CPU频率,让其以低频率启动和运行,在需要拿最高CPU主频的时候才提高频率,避免死机的可能性。
该面板分为Normal模式和Extreme模式,在Normal模式下主要是只能控制外频、自动超频、调整风扇转速等,并且显示CPU温度等信息。这时候你可以把OC Panel安装在机箱的5.25寸光驱位。而Extreme模式下OC Panel则会显示目标设定值,以及Subzero温度探头的数值,以及CPU的各项电压。
华硕R5E主板供电设计
华硕R5E供电部分并没有设计太多的相数,而是中规中矩的8相,每相采用一颗IR3555M Power Stage,每相可通过60A的电流,配上“MicroFine合金电感”和“10K黑金电容”,在Input电压为1.8V时最多可提供1.8*60*8=864W的供电能力,足够5960X超频之后使用了。
内存供电为2相,每相使用一颗TI的CSD97374Q4M Power Stage,最高可支持2MHz的开关频率。LGA 2011-v3四通道内存的供电都是分两组的,R5E也不例外,内存供电两侧各有一组同样的配备。
测试平台及BIOS介绍
测试平台:
CPU:Intel Core i7 5960X
主板:ASUS RAMPAGE V Extreme
内存:Crucial DDR4- & 8GX4 D9RGQ
显卡:MSI N660TF 2GD5/OC
硬盘:Plextor PX-128M2P
电源:Enermax Revolution 85+ 1050W
散热器:Corsair H105
CPU-Z识别主板及CPU基本信息:可以看到我们还是比较容易就把CPU Ring频率超到4GHz,而这就是OC Socket的功劳,在别家主板上是完全办不到的。
BIOS介绍:
R5E的BIOS界面和Z97主板区别不大,只不过ROG主板进入BIOS默认是Advanced界面,当然你可以按F7进入EZ界面,这里我们主要针对超频部分功能Extreme Tweaker做介绍。首先界面如下图分为四块,上边是菜单区,中间左侧是参数调节选项,右侧是当前硬件工作状态监测,下方则是当前选项的具体说明。
Overclocking Presets:里边有好几种预设配置,包括CPU和内存超频的,但是不保证你用了一定能开机,尤其是内存超频的那些,所以慎用。
Ai Overclock Tuner:选择超频模式。如果是带有XMP的内存,可以在此开启XMP,一般情况下我们选Manual。
CPU Strap:CPU外频档位,根据你要跑的内存频率去选,一般选100和125都够用了。不同的Strap会对应不同的外频,不同外频在主频相同时对性能没有直接影响。
Source Clock Tuner:配合不同的Strap在超外频时候可获得更好的超频能力。BIOS里建议100外频用6Ohm,125外频用8Ohm,167外频用4Ohm。
PLL Selection:也是跟超外频相关的,如果DMI/PCIE频率在100时可选LC PLL,超过102就要SB PLL才能上去否则可能开不了机。
Filter PLL:在BCLK频率很高时候可以设为High BCLK Mode,100和125一般用Low就可以。
BCLK Frequency:BCLK频率,也就是外频。
Initial BCLK Frequency:初始BCLK频率,超频BCLK的时候会从这个BCLK频率开始。
以上选项大部分都是关于BCLK的,在一般情况下都不需要动,最多改一个Strap 125外频就好。
下面到倍频。CPU主频=外频x倍频,所以在100外频时候我们要把5960X超到4G只用设置40倍频即可,选择Sync All Cores就是所有核心同步,当然你想的话也可以设置不同步。另外,CPU Cache Ratio就是Ring频率,前边我们提到的OC Socket其中一大作用就是可以把Ring频率超的更高,这里我们把Ring同步跑4G。
接下来是内存频率设置,现在新BIOS已经可以直接用100外频开到DDR4-3200的内存频率了,所以一般来说不用动外频,内存分频都够用。这里我们设为DDR4-2800。
Internal PLL Overvoltage:开了对超频有帮助。
BCLK Frequency : DRAM Frequency Ratio:BCLK和内存频率的比值,可选100:100和100:133,选Auto则是两个分频都有。
DRAM Frequency:内存频率,这里直接设成DDR4-2800就好。
Xtreme Tweaking:对某些Benchmark有提升作用,一般可以忽略。
CPU Level UP:自动超频,不用管。
EPU Power Saving Mode:节能模式,我们想要超频后获得最大效能,所以节能关闭。
下边的DRAM Timing Control、External Digi+ Power Control、Tweakers’ Paradise、Internal CPU Power Management四个项目都是有子菜单的,稍后我们再看。
再下来是电压设置部分。要注意的是,Fully Manual Mode开启之后,才会激活OC Socket的针脚定义功能。
CPU Core Voltage:CPU核心电压,根据自己CPU体质实际情况来设定,不建议超过1.35V,否则发热量很大。
CPU Cache Voltage:CPU L3 Cache/Ring电压,影响Ring频率,间接影响内存效能,没有OC Socket的主板加压到1.3V左右就不再吃电压了,华硕的主板基本上可以吃到1.5V以上。但长期使用1.4V已经有点高,不建议超过1.4V。
CPU System Agent Voltage:系统助手电压,亦为IMC电压,在华硕OC Socket主板上,超频到DDR4-2800的时候,VSA电压1.0V左右即可,在其它主板上同一CPU则需要1.1V甚至更高。
CPU SVID Support:是否启用CPU内部SVID控制,这里我们采用固定电压,所以关闭它。
DRAM Voltage(CHA/B/C/D):AB、CD分别是CPU两侧的内存插槽,电压也都是独立控制的,超频到DDR3-2800,我们需要1.5V的内存电压。
PCH Core/IO Voltage:PCH(X99芯片组)核心、IO电压,保持默认即可,不用动。
接下去还有很多电压,基本都不用动,包括VCCIO。
BIOS介绍(内存部分)
接下来是内存时序设定部分。美光D9RGQ基本上沿袭DDR3时代的情况,高频不好上,但是低频时序表现比较好,我认为在当前Haswell-E平台高频不好上的现状下,D9RGQ颗粒算是比较好的选择。R5E主板BIOS内部已经内置了各个颗粒各种容量和插法的Preset,你也可以直接载入,但不保证能点亮。
每个颗粒、容量、插法内部亦有不同频率的设定:
IC Analyzer会告诉你如何判断颗粒。
1.& & & & 把内存频率设为1600,电压设为1.20V。
2.& & & & 把CL值设为9,tWTR设为3,WCL设为9,保存。
3.& & & & 如果能启动,那么就是美光,如果不能启动,继续做下一步。
4.& & & & 内存频率依然保持1600,电压保持1.20V。
5.& & & & 把REF Cycle设为140,保存。
6.& & & & 如果能启动,就是Hynix颗粒,不能启动就是三星。
以上方法仅适用于当前第一版的三种颗粒,因为我手上没有这三种颗粒,所以灵不灵我也不知道。
以下是我手动设置的美光D9RGQ颗粒第一时序,仅供参考:
接着第二时序。这并非最紧的时序,而是一个比较保守可以启动的值而已。关键是tRFC(DRAM REF Cycle),以及tWTR_L,设错了可能就启动不了。
第三时序,关键是tCCD和tCCD_WR,这两个类似双通道里的tRDRD和tWRWR,对性能影响很大,所以如果太高频设为0开不了机的话,这个高频率除了看也就没其它意义了。
第三时序,继续,tRWDR2、tRWDD、tRWSR2这三个也很重要,设太低会开不了机,影响上高频。RTL IOL Control里还有可调的选项,对SuperPI 32M会有一定影响,但是设错会开不了机,一般就不建议动了。
接下来杂项里,DRAM CLK Period对稳定性稍微有点影响,D9RGQ设置6或13都是比较理想的。
BIOS介绍(DIGI+ VRM部分)
接下来看External Digi+ Power Control子选项,主要是关于供电部分。
CPU Input Boot Voltage:CPU输入电压启动值,设为Auto就是跟之前设的Input电压一样了。
CPU Load-line Calibration:CPU Input电压掉压补偿,LV1掉压最多,LV9补偿最多。
CPU VRM Switching Frequency:CPU供电PWM频率,你可以让PWM芯片自动控制,但是手动指定是最有利于超频的,这里我们设为800KHz。
CPU Power Phase Control:CPU供电相位控制,设为Extreme就是相数全开。
CPU Power Duty Control:调整供电的负载平衡,选择Extreme是输出平衡,可以最大限度减小电压波纹值,但是可能会使供电发热不均,在有散热片的情况下问题不大。
CPU Current Capability:CPU供电电流过保护设定,设为240%是最高了。
CPU Power Thermal Control:CPU供电过热保护设定,最高是136摄氏度。
DRAM Current Capability:内存供电过电流保护设定,140%是最高。
DRAM Switching Frequency:内存供电PWM频率,同样手动800KHz是最高。
DRAM Power Phase Control:内存供电相位设置,设为Extreme是相数全开(本来也就2相)。
Tweakers’ Paradise,这里边基本上是液氮模式下改善Cold Bug才用到的选项,一般不用管了。
Internal CPU Power Management里边,基本上都不太需要动,超频之后会自动帮你解开TDP限制和禁用FIVR瓦数监控的。
BIOS设置保存的时候会提示你修改过的选项,你可以再确认一下是否有改错。
稳定性及发热量测试
我们这颗5960X算是大雷,在Input电压1.92V、Vcore电压1.18V、Vring电压1.4V时以双4GHz通过Prime 95测试,这时候核心温度最高也达到80度。
由于12V CPU输入供电电流表损坏暂未有时间修复,所以这次暂停。不过220V插座功耗表录得最多395W的整机功耗,除去平台功耗之外,我们推测CPU在这个状态下功耗接近300W。我们看一下热成像仪对CPU供电部分的反映情况,CPU供电散热片部分表现良好,最热处出现在电容部位,但也仅有59.5度,对于8相供电、300W的负载来说这个表现已经很好。平台最热处还是出现在8PIN CPU供电输入,温度已经达到95度以上,就如我之前所说,想要长时间满载最好还是插满8+4PIN。
第二天我们把内存超到DDR4-2666来测试,这也是我们的内存能通过Prime 95的最高频率,再上去虽然还能超到甚至DDR4-3000以上,但一直都无法稳定。不过第二天的室温降低了3度,加上我们也把散热器风扇转速调高,所以温度表现稍微比之前好了一些,这个温度还是可接受范围的。
关于内存效能的进一步测试
前边我一直在强调OC Socket的好处,最大的贡献就是可以真正让Ring频率可以随着电压的提高而提高,从而跨过3.7GHz左右的频率墙。而上次我们在评测MSI X99S XPOWER AC的时候,也。那么下面我们就看看在其他家无法企及的Ring频率墙之外,DDR4内存的效能可以达到一个什么地步。
这次评测的内存我还是使用Micron DDR4-2133普条,D9RGQ颗粒,默认规格-15,单条8GB和4GB都有。
在OC Socket的帮助下,我们成功将Ring频率由原来的3.75GHz推高至4.4GHz,但此时系统也非常不稳定,很容易出现断电重启现象。
我们分别从各方面来考察内存效能的变化,测试标准都是使用AIDA64内存读写测试。首先固定Ring频率4GHz,设置不同的内存频率。从下图可以看到,内存读取和复制效能随着内存频率的增加而稳定提升,而写入则被死死的卡在接近64GB/s的水平,符合我们之前推出的公式:Ring频率(MHz)/62.5=内存写入瓶颈值(GB/S)。
固定内存频率,把Ring频率分别设置4.0G、4.2G和4.4G,可以看到内存读取稍微有提升,写入线性提升,复制基本不变。在Ring频率达到4.4G时,在DDR4-2800的频率下,读取破了80GB/s,写入破了70GB/s,算是追上DDR3比较好的效能了。
相比非OC Socket主板Ring频率只能超到3.75G,即使内存同样超到一个高度表现也有差异,来对比一下ASUS OC Socket主板和其它非OC Socket主板在内存超频到DDR4-3000时候的内存效能。同时加入默认和Hynix MFR颗粒开XMP DDR4-2800其余默认的效能对比。可以看到Ring频率对内存效能的影响甚至超越内存开XMP,DDR4-2133超到2800的提升,OC Socket在内存写入上提升最大,可达10GB/s以上或接近20%,而相比默认设置的累积提升则可以达到接近46%的幅度,在同架构平台不同厂家的产品上有这么大的差异在近年来还是很罕见的。
我还发现一些高频内存XMP一开效能并不怎么好,虽然比默认的2133要好一些,但是面对DDR4-2800甚至3000的频率才跑出60多GB/s的读取显然不及格,所以一定有某个时序为了上高频而牺牲效能。在DDR3时代四通道tCCD是主要的影响时序,双通道则是tRDRD、tWRWR,到了DDR4四通道时代,同样有tCCD和tCCD_WR两个时序影响性能,具体情况如下图:横坐标是tCCD-tCCD_WR两个时序,注意顺序。可以看到tCCD在设为1T时内存读取效能大概会比0T时掉10%,而tCCD_WR却没有直接影响写入效能,因为写入是被Ring频率拖慢,但是从内存复制效能上可以看到tCCD和tCCD_WR的共同影响,并且可以看到tCCD_WR为1T的时候,内存复制效能影响更大一些。
还有一个大家不太愿看到的消息,就是目前4Gx4的DDR4内存市售产品基本都是单面的颗粒,效能会比双面的差一点,这是由于单面只有一个Rank,所以相对来说命中率会差一点。而8Gx4的DDR4目前价格都非常高,所以目前大家购买4Gx4的DDR4除了容量上的差异外还要承受一定的性能损失,不过根据我的测试结果如下图,好在差距不大,基本都在5%以内。
最后,放一个我这颗CPU和这套内存在R5E平台跑出的最高成绩,比其它主板上Ring跑在3.75GHz时内存写入整整提高了10GB/s,如果CPU体质好点可以跑到4.5GHz的Ring,写入就可以达到72GB/s,这个效能我觉得对DDR4普条的表现已经可以说是非常满意了。
由于条件限制,我们对R5E主板的测试只能到此作罢,希望能借此把OC Socket的优势介绍给大家,实际上R5E还有其它很多可玩的功能有待大家去挖掘,例如OC Panel、板载M.2接口 PCIE 3.0 x4、SupremeFX 2014音效等。
从测试数据中我们看到,AIDA64内存带宽测试中,R5E配上美光DDR4-2133普条在Ring超频到4.2甚至4.4G,内存超到DDR4-3000之后,效能非常惊艳,尤其是读取,四通道DDR3很难达到80GB/s以上的,也比那些所谓的DDR4-3000内存开XMP后性能有过之而无不及。所以,XMP不是万能的,它只能让你获得比默认好一点的效能,好处是可以确保你的系统稳定,想要释放更多的潜能还得必须自己调节。但是我们这套美光8GX4普条真正能稳定的频率只有DDR4-2666,再上去虽然可以超到DDR4-3000跑测试,但是过不了Memtest和Prime 95,有点遗憾。当然了,超频内存本身对系统整体性能影响还是很小,你也可以选择只超CPU不超Ring和内存。
另外,在DDR4内存超到DDR4-3000以上之后,由于内存DQS Training的问题,可能不是每次都能开机成功,Debug灯会卡在BD,这时候不要急着恢复默认设置或者改设置,多试几次或许就启动得了,而且一旦能启动,很多测试都是可以跑的。如果Debug灯在BF,动一下电压或许就能开机成功,而且Ring频率越高,卡BF的可能性也越大,所以在Ring和内存同时超频到极限时,能成功开机实际上要靠很大的运气成份。
最后我只能说,华硕的OC Socket这一手狠招让别的厂商不得不服,X99平台真想要超频发挥CPU的全部性能,请买ASUS OC Socket主板。
PCEVA综合评价:OC Socket大法好。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
活跃度 +30
R大如同神一般的存在了。
width:100%">
土豪们上!
width:100%">
X79就只能买啊速死,X99更只能买啊速死
width:100%">
X99-A在香港很便宜
width:100%">
华硕的高端还是没话说
width:100%">
黑科技感人......Outel不厚道
width:100%">
华硕这黑科技...比堆料有用多了
width:100%">
感觉这代rog没以前红的正了 不知道是不是错觉....
width:100%">
实力就是实力。华硕就是华硕。
width:100%">
阿苏斯大法好……
ps:如果intel公开那几个引脚的定义,asus的专利还有效吗?
width:100%">
iFive 发表于
阿苏斯大法好……
ps:如果intel公开那几个引脚的定义,asus的专利还有效吗? ...
这些定义已经在白皮书里公开了的
哦,谢谢R大解答&
width:100%">
X99杜蕾斯可以用上去了,我还是最想看OC PANEL超频显卡的测试,可惜看不了
width:100%">
michelelee 发表于
X99杜蕾斯可以用上去了,我还是最想看OC PANEL超频显卡的测试,可惜看不了
这个需要硬改PWM,我是没条件做了
不过原理其实还是很简单的
width:100%">
& &华硕在技能树上面还是点得挺对的,市面上就此一家,想这么玩只能买他家的……
& &我也知足了,X79已经玩上了,以后有点闲钱玩玩双路,也就这样了……
width:100%">
所以说呢,华硕就是华硕,可不是什么信仰,而是真正具备过硬的实力
仅限主板了,显卡现在他就是个卖信仰的&
width:100%">
韩柏8250 发表于
所以说呢,华硕就是华硕,可不是什么信仰,而是真正具备过硬的实力
它的高端这么形容没错,低端就真是“信仰”了。
width:100%">
本帖最后由 韩柏8250 于
09:52 编辑
cccp 发表于
它的高端这么形容没错,低端就真是“信仰”了。
这个要具体对待。首先,受成本所限,厂商能够发挥的余地不多,所以差别不大,打个比方,你给劳斯莱斯2万人民币,它也只能做出奇瑞QQ的水平 另一方面,主板除了硬件规格、用料、做工之外,人性化设计、易用性、兼容性、稳定性、售后等隐性指标,不是能直观反映出来的,而这些也是要花费成本的,一线三大厂商,尤其是华硕,之所以贵,除了品牌溢价的因素之外,在这些不容易马上体验到而又同样很重要的隐性指标上,确实比一般品牌做得好(包括低端型号),这个,还真不是信仰,而是大量实际使用经验得出的结论,呵呵
至于说华硕的显卡,华硕不仅仅自己做显卡,还是N卡和A卡的代工大厂,华硕的品质,绝非浪得虚名
width:100%">
royalk 发表于
这些定义已经在白皮书里公开了的
那 socket 应该怎么说 intel 也有指导?
其他厂商都是 按这个常规指导来的?
asus仔细研究了白皮书后,独立推出的?
毕竟intel不太会单独透露给asus吧.
width:100%">
Pale_Cheung 发表于
那 socket 应该怎么说 intel 也有指导?
其他厂商都是 按这个常规指导来的?
现在的说法就是ASUS提前拿到这些资料,这个文档是NDA解禁之后才公开的
width:100%">
royalk 发表于
现在的说法就是ASUS提前拿到这些资料,这个文档是NDA解禁之后才公开的
那多数是asus有卧底在intel了.
别家只有 推第二版的时候才有机会改了...
width:100%">
& 北京绝对领域咨询有限公司

我要回帖

更多关于 使命召唤ol服务器选择 的文章

 

随机推荐