保存记忆
Socket 的三次招手四次挥手
服务端:
1:创建一个socket的对象,Socket socketserver=new Socket
(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
第一个参数是指定socket对象使用的寻址方案,即IPV4或IPV6;
第二个参数socket对象的套接字的类型,此处stream是表示流式套接字
第三个参数socket对象支持的协议,TCP协议或UDP协议。
这三个参数一般初期使用上面的就OK了,到了后期对socket通信熟悉了再来看其它参数的功能及作用。
2:使用指定的端口号和服务器的ip地址初始化System.Net.IPEndPoint类的实例
IPEndPoint endpoint=new IPEndPoint(ipaddress, port);
3:用socket对像socketserver的Bind()方法绑定IPEndPoint;
socketserver.Bind(endpoint);
4:用socket对像socketserver的Listen()方法开始监听;
socketwatch.Listen(20);//此处是让服务器可以监听20个客户端的连接。
5:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;
SocketsocConnection = socketwatch.Accept();//socConnection 就是服务器监听到的客户端连接的套接字,服务器就可以通过socConnection 和该连接的客户端进行通信。
6;此处就可以使用socConnection 进行通信Receive()和Send();
7:通信结束后一定记得关闭socket,close()方法;
客户端:
1:创建一个socket的对象socketclient(和服务器一样)
2:使用指定的端口号和服务器的ip地址初始化System.Net.IPEndPoint类的实例(和服务器一样)
3:用socket对像socketclient的Connect()方法以上面建立的IPEndPoint对像做为参数,向服务器发出连接请求;
其中Connect的参数就是第二步IPEndPoint的实例
4:连接成功后,就可以进行通信(Receive()和Send())
5:通信结束后一定记得关闭socket,close()方法;
贴代码 客户端
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net;
using System.Net.Sockets;
using System;
using System.Text;
using System.Threading;
public class SocketKHD : MonoBehaviour {
byte[] result = new byte[1024];
IPAddress ip;
Socket socketserver;
void Start()
{
ip = IPAddress.Parse("192.168.1.136");
socketserver = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
try
{
socketserver.Connect(new IPEndPoint(ip, 8899));
print("连接成功");
}
catch
{
print("连接失败");
return;
}
lianjie();
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
string str = "我是客户端";
socketserver.Send(Encoding.UTF8.GetBytes(str));
}
}
void lianjie()
{
int num = socketserver.Receive(result);
print(Encoding.UTF8.GetString(result, 0, num));
}
}
服务器端
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;
namespace cccc_ConsoleServer_1
{
class Program
{
static Socket socketserver;
static byte[] result = new byte[1024];
static void Main(string[] args)
{
IPAddress ip = IPAddress.Parse("192.168.1.136");
socketserver = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
socketserver.Bind(new IPEndPoint(ip, 8899));
socketserver.Listen(10);
while (true)
{
Socket clientsocket = socketserver.Accept();
clientsocket.Send(Encoding.UTF8.GetBytes("我是服务器"));
while (true)
{
try
{
int num = clientsocket.Receive(result);
Console.WriteLine(Encoding.UTF8.GetString(result, 0, num));
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
socketserver.Close();
}
}
}
}
}
}
服务器端没有处理强制断开连接 使用需谨慎 有时间再去续写