游戏匹配用长反编译后连接数据库如何实现源码

没有更多推荐了,
不良信息举报
举报内容:
APP长连接的实现
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!手机游戏中的长连接和短连接哪个实现起来更难? - 知乎7被浏览<strong class="NumberBoard-itemValue" title="分享邀请回答1添加评论分享收藏感谢收起01 条评论分享收藏感谢收起写回答iOS使用GCDSocketManager实现长连接代码部分 - 简书
iOS使用GCDSocketManager实现长连接代码部分
#import &Foundation/Foundation.h&
#import "GCDAsyncSocket.h"
@interface GCDSocketManager : NSObject
@property(nonatomic,strong) GCDAsyncSocket *
+ (instancetype)sharedSocketM
- (void)connectToS
- (void)cutOffS
#import "GCDSocketManager.h"
#define SocketHost @"地址"
#define SocketPort 端口
@interface GCDSocketManager()&GCDAsyncSocketDelegate&
//握手次数
@property(nonatomic,assign) NSInteger pushC
//断开重连定时器
@property(nonatomic,strong) NSTimer *
//重连次数
@property(nonatomic,assign) NSInteger reconnectC
@implementation GCDSocketManager
//全局访问点
+ (instancetype)sharedSocketManager {
static GCDSocketManager *_instance =
static dispatch_once_t onceT
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
//可以在这里做一些初始化操作
- (instancetype)init
self = [super init];
if (self) {
#pragma mark 请求连接
- (void)connectToServer {
self.pushCount = 0;
self.socket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
NSError *error =
[self.socket connectToHost:SocketHost onPort:SocketPort error:&error];
if (error) {
DLog(@"SocketConnectError:%@",error);
#pragma mark 连接成功
//连接成功的回调
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port {
DLog(@"socket连接成功");
[self sendDataToServer];
//连接成功后向服务器发送数据
- (void)sendDataToServer {
//发送数据代码省略...
[self.socket writeData:jsonData withTimeout:-1 tag:1];
//读取数据
[self.socket readDataWithTimeout:-1 tag:200];
//连接成功向服务器发送数据后,服务器会有响应
- (void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
[self.socket readDataWithTimeout:-1 tag:200];
//服务器推送次数
self.pushCount++;
//在这里进行校验操作,情况分为成功和失败两种,成功的操作一般都是拉取数据
#pragma mark 连接失败
//连接失败的回调
- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err {
DLog(@"Socket连接失败");
self.pushCount = 0;
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *currentStatu = [userDefaults valueForKey:@"Statu"];
//程序在前台才进行重连
if ([currentStatu isEqualToString:@"foreground"]) {
//重连次数
self.reconnectCount++;
//如果连接失败 累加1秒重新连接 减少服务器压力
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 * self.reconnectCount target:self selector:@selector(reconnectServer) userInfo:nil repeats:NO];
self.timer =
//如果连接失败,5秒后重新连接
- (void)reconnectServer {
self.pushCount = 0;
self.reconnectCount = 0;
//连接失败重新连接
NSError *error =
[self.socket connectToHost:SocketHost onPort:SocketPort error:&error];
if (error) {
DLog(@"SocektConnectError:%@",error);
#pragma mark 断开连接
//切断连接
- (void)cutOffSocket {
DLog(@"socket断开连接");
self.pushCount = 0;
self.reconnectCount = 0;
[self.timer invalidate];
self.timer =
[self.socket disconnect];
新的更新地址在掘金:
https://juejin.im/user/594cb6f1f265da6c440725cf
通过连接搜索不到可以直接搜索名字huber
A a (an) [?, e?(?n)] art. 一(个、件……) abandon [?'baend?n] v.抛弃,舍弃,放弃 ability [?'b?l?t?] n. 能力;才能 able ['e?b(?)l] a. 能够;有能力的 abnormal [aeb'n?:m...
貌似进入2016年就没再更新简书,把写作忘了。罪过。 OK,进入正题,开始今天的技术讲解。 太概念的知识网上有很多,我只做概括和快速并正确的使用。 Socket,即使用套接字连接,实际上是对TCP/UDP的再次封装。 在一般项目中,使用Socket的情况很少,一般都会使用h...
## 可重入函数 ### 可重入性的理解 若一个程序或子程序可以安全的被并行执行,则称其为可重入的;即当该子程序正在运行时,可以再次进入并执行它。若一个函数是可重入的,则该函数必须满足一下必要条件: 1. 不能含有静态(全局)非常量数据。 2. 不能返回静态(全局)非常量数...
X399平台点睛之笔ZENITHEXTREME引爆性能狂潮 近期,X399平台的顶级性能浮出水面,各家媒体的全方位测试犹如一支强心剂,让PC玩家大呼过瘾。我们惊喜地发现,国内外各大科技媒体一致选用了ROGZENITH EXTREME这款主板。它是华硕目前最顶级的X399芯片...
Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:)大多数的美国人读 ubuntu 时,将 u 作为元音发音,类似单词 who 或者 boo ,重音在第二...
追求道德层次,我不过是为了心理的舒适——因为当我自私时,我的整个状态是匮乏的,伴随着的是一种不舒服的感觉。 所以,我对超脱、对于无私的追求本质上仍是一种自私——对于无私的追求仍是自私的推动。 但这又如何呢?也许就是这样的法则——建立在利己本质基础上的利人——也许也才是最牢固...
《我心深处》出自一位热诚的电影艺术家之手,艾伦不单单以一个过来人,旁观者,引导者的角度诠释对于自己的作品的看法,他更多的将自己对于这个世界上诸多的文化,宗教,道德有着更为透彻的理解。
现在,对于这本书更大意义在于,对于我们和作者都是,用更为客观的角度与评价来审视自身。寻...
我吻过你的脸,像是陕西的面。 01 大学的时候,由于家里人手需要,我经常被我爸喊回家里帮忙。 后来大二的时候学了驾照,家里合计着杭州到苏州的路费和我回去的次数比较高,花了六千多块钱给我买了辆二手的破奇瑞。 那时候刚好滴滴的顺风快车比较流行,我也琢磨着可以省点油费,于是也开始...服务器端程序:
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
boolean started =
ServerSocket ss =
List&Client& clients = new ArrayList&Client&();
public static void main(String[] args) {
new ChatServer().start();
public void start() {
ss = new ServerSocket(8888);
System.out.println("端口已开启,占用8888端口号....");
} catch (BindException e) {
System.out.println("端口使用中....");
System.out.println("请关掉相关程序并重新运行服务器!");
System.exit(0);
} catch (IOException e) {
e.printStackTrace();
while (started) {
Socket s = ss.accept();
Client c = new Client(s);
System.out.println("a client connected!");
new Thread(c).start();
clients.add(c);
} catch (IOException e) {
e.printStackTrace();
} finally {
ss.close();
} catch (IOException e) {
e.printStackTrace();
class Client implements Runnable {
private DataInputStream dis =
private DataOutputStream dos =
private boolean bConnected =
public Client(Socket s) {
dis = new DataInputStream(s.getInputStream());
dos = new DataOutputStream(s.getOutputStream());
bConnected =
} catch (IOException e) {
e.printStackTrace();
public void send(String str) {
dos.writeUTF(str);
} catch (IOException e) {
clients.remove(this);
System.out.println("对方退出了!我从List里面去掉了!");
public void run() {
while (bConnected) {
String str = dis.readUTF();
System.out.println("------------来自本地服务器:" + str);
for (int i = 0; i & clients.size(); i++) {
Client c = clients.get(i);
c.send(str);
} catch (EOFException e) {
System.out.println("Client closed!");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (dis != null)
dis.close();
if (dos != null)
dos.close();
if (s != null) {
s.close();
} catch (IOException e1) {
e1.printStackTrace();
客户端程序:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
阅读(...) 评论()

我要回帖

更多关于 java免费源码 的文章

 

随机推荐