Socket TCP在ios上使用应该注意哪些问题
答案:1 悬赏:20 手机版
解决时间 2021-02-15 14:11
- 提问者网友:抽煙菂渘情少年
- 2021-02-15 01:13
Socket TCP在ios上使用应该注意哪些问题
最佳答案
- 五星知识达人网友:拾荒鲤
- 2021-02-15 02:46
ios 使用TCP有没有什么特殊的地方啊!为什么我写的东西在安卓上和电脑上都好使,
CDR._client是一个静态字段;public class LOSocket
{
//可以创建的Socket端口类型
public enum LOSocketType
{
CLIENT = 0,
SERVER = 1,
}
#region --------取消构造器
private LOSocket ()
{
}
#endregion
#region --------公共代码
//通过静态方法获取不同的端口类型
public static LOSocket GetSocket (LOSocket.LOSocketType type)
{
LOSocket socket = null;
switch (type) {
case LOSocketType.CLIENT:
{
//创建一个新的客户端
socket = new LOSocket ();
break;
}
}
return socket;
}
#endregion
#region --------客户端部分代码
private Socket clientSocket;
//声明客户端收到服务端返回消息后的回调委托函数
private ReceiveCallBack clientReceiveCallBack;
//用来存储服务端返回的消息数据
byte[] Buffer = new byte[1024];
//初始化客户端Socket信息
public void InitClient (string ip, int port, ReceiveCallBack ccb)
{
this.clientReceiveCallBack = ccb;
this.clientSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress address = IPAddress.Parse (ip);
IPEndPoint ep = new IPEndPoint (address, port);
this.clientSocket.Connect (ep);
// if (!clientSocket.Connected) {
// CDR.exception = "连接已经断开";
// Debug.Log ("连接已经断开");
// }
//开始异步等待接收服务端消息
this.clientSocket.BeginReceive (Buffer, 0, Buffer.Length, SocketFlags.None, new System.AsyncCallback (ReceiveFromServer), this.clientSocket);
}
//收到服务端返回消息后的回调函数
void ReceiveFromServer (System.IAsyncResult ar)
{
//获取当前正在工作的Socket对象
Socket worker = ar.AsyncState as Socket;
int ByteRead = 0;
try {
//接收完毕消息后的字节数
ByteRead = worker.EndReceive (ar);
Debug.Log ("--" + ByteRead);
} catch (System.Exception ex) {
CDR.exception = ex.ToString ()+"BuHuoDeYiChang";
// this.clientReceiveCallBack(ex.ToString());
}
if (ByteRead > 0) {
string Content = Encoding.UTF8.GetString (Buffer, 0, ByteRead);
//通过回调函数将消息返回给调用者
Debug.Log ("Content:" + Content);
this.clientReceiveCallBack (Content);
}
//继续异步等待接受服务器的返回消息
worker.BeginReceive (Buffer, 0, Buffer.Length, SocketFlags.None, new System.AsyncCallback (ReceiveFromServer), worker);
}
//客户端主动发送消息
public void SendMessage (string message)
{
if (message == null)
return;
CDR.cs+="FaSongData"+message+"\n";
Debug.Log (message);
message += "\r\n";
byte[] sendData = Encoding.UTF8.GetBytes (message);
//异步发送消息请求
clientSocket.BeginSend (sendData, 0, sendData.Length, SocketFlags.None, new System.AsyncCallback (SendToServer), clientSocket);
}
//发送消息结束的回调函数
void SendToServer (System.IAsyncResult ar)
{
Socket worker = ar.AsyncState as Socket;
worker.EndSend (ar);
CDR.isHeartbeat = 0;
}
#endregion
下面是客户端的发送和接收的代码
CDR._client是一个静态字段;public class LOSocket
{
//可以创建的Socket端口类型
public enum LOSocketType
{
CLIENT = 0,
SERVER = 1,
}
#region --------取消构造器
private LOSocket ()
{
}
#endregion
#region --------公共代码
//通过静态方法获取不同的端口类型
public static LOSocket GetSocket (LOSocket.LOSocketType type)
{
LOSocket socket = null;
switch (type) {
case LOSocketType.CLIENT:
{
//创建一个新的客户端
socket = new LOSocket ();
break;
}
}
return socket;
}
#endregion
#region --------客户端部分代码
private Socket clientSocket;
//声明客户端收到服务端返回消息后的回调委托函数
private ReceiveCallBack clientReceiveCallBack;
//用来存储服务端返回的消息数据
byte[] Buffer = new byte[1024];
//初始化客户端Socket信息
public void InitClient (string ip, int port, ReceiveCallBack ccb)
{
this.clientReceiveCallBack = ccb;
this.clientSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress address = IPAddress.Parse (ip);
IPEndPoint ep = new IPEndPoint (address, port);
this.clientSocket.Connect (ep);
// if (!clientSocket.Connected) {
// CDR.exception = "连接已经断开";
// Debug.Log ("连接已经断开");
// }
//开始异步等待接收服务端消息
this.clientSocket.BeginReceive (Buffer, 0, Buffer.Length, SocketFlags.None, new System.AsyncCallback (ReceiveFromServer), this.clientSocket);
}
//收到服务端返回消息后的回调函数
void ReceiveFromServer (System.IAsyncResult ar)
{
//获取当前正在工作的Socket对象
Socket worker = ar.AsyncState as Socket;
int ByteRead = 0;
try {
//接收完毕消息后的字节数
ByteRead = worker.EndReceive (ar);
Debug.Log ("--" + ByteRead);
} catch (System.Exception ex) {
CDR.exception = ex.ToString ()+"BuHuoDeYiChang";
// this.clientReceiveCallBack(ex.ToString());
}
if (ByteRead > 0) {
string Content = Encoding.UTF8.GetString (Buffer, 0, ByteRead);
//通过回调函数将消息返回给调用者
Debug.Log ("Content:" + Content);
this.clientReceiveCallBack (Content);
}
//继续异步等待接受服务器的返回消息
worker.BeginReceive (Buffer, 0, Buffer.Length, SocketFlags.None, new System.AsyncCallback (ReceiveFromServer), worker);
}
//客户端主动发送消息
public void SendMessage (string message)
{
if (message == null)
return;
CDR.cs+="FaSongData"+message+"\n";
Debug.Log (message);
message += "\r\n";
byte[] sendData = Encoding.UTF8.GetBytes (message);
//异步发送消息请求
clientSocket.BeginSend (sendData, 0, sendData.Length, SocketFlags.None, new System.AsyncCallback (SendToServer), clientSocket);
}
//发送消息结束的回调函数
void SendToServer (System.IAsyncResult ar)
{
Socket worker = ar.AsyncState as Socket;
worker.EndSend (ar);
CDR.isHeartbeat = 0;
}
#endregion
下面是客户端的发送和接收的代码
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯