
1 功能需求:
1 在Swift下使用GcdasyncSocket实现简单的信息收发功能
2 Mac下为tcp服务器,windows下为tcp客户端
2 效果图:
3 swift代码:需要导入GcdasyncSocket库文件,可去github下载
import UIKit
class VIEwController:UIVIEwController,GcdasyncSocketDelegate {
@IBOutlet var startBtn:UIbutton!
@IBOutlet var msgTextVIEw:UITextVIEw!
var serverSocket: GcdasyncSocket!
let serverPort: UInt16 =9050
var clIEntSockets: NSMutableArray!
var startIsSuccessful = false
var mainQueue =dispatch_get_main_queue()
@IBOutlet var inputTextinput:UITextFIEld!
@IBOutlet var sendBtn:UIbutton!
overrIDe func vIEwDIDLoad() {
super.vIEwDIDLoad()
clIEntSockets =NSMutableArray()
msgTextVIEw.backgroundcolor =UIcolor.graycolor()
msgTextVIEw.text ="接收的客户端消息:\n"
}
// 发送消息按钮
@IBAction func sendBtnClick(sender:AnyObject) {
if clIEntSockets.count ==0 {
return
}
let msg = inputTextinput.text!
// 1.处理请求,返回数据给客户端 ok
let serviceStr:NSMutableString = NSMutableString()
serviceStr.appendString(msg)
serviceStr.appendString("\n")
let wSocket = clIEntSockets[0]// 此处只使用一个客户端连接
wSocket.writeData(serviceStr.dataUsingEnCoding(NSUTF8StringEnCoding),withTimeout: -1,tag: 0)
}
//开启服务按钮
@IBAction func startServer(sender:AnyObject) {
// 1 初始化 我是mac
serverSocket =GcdasyncSocket()
// 2 设置委托
serverSocket.delegate =self
serverSocket.delegateQueue =dispatch_get_global_queue(0,00)
do {
tryserverSocket.acceptOnPort(serverPort)
startIsSuccessful =true
self.startBtn.enabled =false
print("server start successful!")
}
catch {
startBtn.backgroundcolor =UIcolor.redcolor()
print("server start error!")
}
}
/*
* 有客户端的socket连接到服务器
*/
func socket(srvSocket: GcdasyncSocket!,dIDAcceptNewSocket cSocket: GcdasyncSocket!) {
// 1 保存socket: 判断socket是否存在,不存在就添加
if cSocket == nil {
print("clIEnt sock nil")
return
}
if clIEntSockets.containsObject(cSocket) {
print("已经存在!")
return
}
else {
// 不存在,添加
clIEntSockets.addobject(cSocket)
}
// 2 返回消息
let serviceStr:NSMutableString = NSMutableString()
serviceStr.appendString("login successful\n")
cSocket.writeData(serviceStr.dataUsingEnCoding(NSUTF8StringEnCoding),tag: 0)
// 3.监听客户端有没有数据上传
//timeout -1 代表不超时
//tag 标识作用,现在不用,就写0
cSocket.readDataWithTimeout(-1,tag:0)
}
/*
* 读取客户端请求的数据
*/
func socket(cSocket: GcdasyncSocket!,dIDReadData data: NSData!,withTag tag:Int) {
// 1 获取客户的发来的数据 ,把 NSData 转 Nsstring
let readClIEntDataString: Nsstring? = Nsstring(data: data,enCoding:NSUTF8StringEnCoding)
print(readClIEntDataString!)
// 2 主界面ui 显示数据
dispatch_async(mainQueue,{
let showStr:NSMutableString = NSMutableString()
showStr.appendString(self.msgTextVIEw.text)
showStr.appendString(readClIEntDataString!as String)
showStr.appendString("\n")
self.msgTextVIEw.text = showStras String
})
// 3.处理请求,返回数据给客户端 ok
let serviceStr:NSMutableString = NSMutableString()
serviceStr.appendString("ok\n")
cSocket.writeData(serviceStr.dataUsingEnCoding(NSUTF8StringEnCoding),tag: 0)
// 4每次读完数据后,都要调用一次监听数据的方法
cSocket.readDataWithTimeout(-1,tag:0)
}
}
总结以上是内存溢出为你收集整理的Swift开发:GCDAsyncSocket通信之TCP服务器全部内容,希望文章能够帮你解决Swift开发:GCDAsyncSocket通信之TCP服务器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)