开篇先说明,这个游戏制作也是我跟随别人的教程制作的游戏,因此想要了解更多的内容可以去看siki老师的视频,我这里做笔记的目的有两个,一个是帮助喜欢看文字版教程的朋友进一步的学习,一个是保存自己在学习中的一个逻辑和思路,如果看到这个视频会对你有帮助,那就再好不过了,当然这里的话是其中百分之30的内容,后面的制作我会放在我的其他博客下继续
1. 关于IP和端口号的知识
我们经常申请的端口号是49152-65535,1024以前的基本是知名端口
2. 绑定我们的IP和端口号
namespace tcp服务器端
{
classProgram
{
staticvoid Main(string[] args)
{
//首先,创建我们的Socket,是ipv4的地址,以流的形式传输,使用的是tcp协议
Socketmysocket = newSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//第二部,创建我们的ip地址
IPAddress ipaddress = IPAddress.Parse("127.0.0.1");
//将ip地址和我们指定的端口号进行绑定
IPEndPoint ipendpoint = new IPEndPoint(ipaddress, 88);
//将socket和端口号进行绑定
mysocket.Bind(ipendpoint);
}
}
}
3. 创建我们的服务器端
这里的话,我们让socket开始监听以后,就创建一个接受客户端连接的socket,我们一般是用receive和send来收发数据,这里要注意传递的数据都是字节数组,我们要将它转变成
classProgram
{
staticvoid Main(string[] args)
{
//首先,创建我们的Socket,是ipv4的地址,以流的形式传输,使用的是tcp协议
Socket mysocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream, ProtocolType.Tcp);
//第二部,创建我们的ip地址
IPAddress ipaddress =IPAddress.Parse("127.0.0.1");
//将ip地址和我们指定的端口号进行绑定
IPEndPoint ipendpoint = new IPEndPoint(ipaddress,88);
//将socket和端口号进行绑定
mysocket.Bind(ipendpoint);
mysocket.Listen(0);
Socket clientSocket =mysocket.Accept();//接受客户端连接
//向客户端发送一条信息
string msg = "hello客户端";
byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);
clientSocket.Send(data);
//从客户端接受数据
byte[] getdata = newbyte[1024];
int count = clientSocket.Receive(getdata);
//这里表示用getdata这个数组来接受客户端传递的数据,再将传递数据长度的字节数组转换成字符串再输出
string msg2 = System.Text.Encoding.UTF8.GetString(getdata, 0,count);
Console.WriteLine(msg2);
clientSocket.Close();
mysocket.Close();
}
4. 创建我们的客户端
客户端也是一样创建自己的socket,和服务器提供的端口相连接,然后再收发信息即可
5. using System;
6. using System.Collections.Generic;
7. using System.Linq;
8. using System.Text;
9. using System.Threading.Tasks;
10.using System.Net.Sockets;
11.using System.Net;
12.
13.namespace tcp客户端
14.{
15. classProgram
16. {
17. staticvoid Main(string[] args)
18. {
19. Socket clientSocket = newSocket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
20. IPEndPoint iPEndPoint = newIPEndPoint(IPAddress.Parse("10.128.230.79"), 88);
21. clientSocket.Connect(iPEndPoint);
22. //客户端接受输出
23. byte[] receivedata = newbyte[1024];
24. int count = clientSocket.Receive(receivedata);
25. string message = Encoding.UTF8.GetString(receivedata, 0,count);
26. Console.WriteLine(message);
27.
28. //客户端向服务器发送数据
29. string msg2 = Console.ReadLine();
30. clientSocket.Send(Encoding.UTF8.GetBytes(msg2));
31.
32. Console.ReadKey();
33. clientSocket.Close();
34.
35.
36. }
37. }
38. }
5.如何异步获取到数据
这里我们使用一个BeginReceive开始异步接受数据,传递过来我们的客户端这个参数,然后重复调用一个AsyncCallBack的方法,通过begin和end来实现多次对于信息的接受
staticbyte[] databuffer = newbyte[1024];
clientSocket.BeginReceive(databuffer, 0, 1024, SocketFlags.None,AsyncCallback, clientSocket);
}
staticvoidAsyncCallback(IAsyncResult ar){
Socket clientSocket = ar.AsyncStateas Socket;
int count = clientSocket.EndReceive(ar);
string msg = Encoding.UTF8.GetString(databuffer, 0, count);
Console.WriteLine("从客户端接受信息" + msg);
clientSocket.BeginReceive(databuffer, 0, 1024, SocketFlags.None,AsyncCallback, clientSocket);
}