参考教程:【01_C#入门到精通】新手强烈推荐:C#开发课程,一整套课程_哔哩哔哩_bilibiliP178-P187
我由于毕设需要来学网络通信,属于完全没常识的小白,网上很多现成代码却不懂概念、不会改,现在总结一下踩过的坑,希望后来人少走弯路。
目录
TCP通信理解
纯小白建议看课程理解,讲得很通俗。
TCP的通信过程与打电话的过程大致相同,一方负责接听特定号码的电话,而另外一方则需要拨通这个电话号码,与对方建立连接。双方都可以通过听筒(socket输入流)接受对方的信息,通过话筒(socket输出流)向对方发送信息,并且在整个过程中信息的接收和发送是同时进行的。
Socket对应电话,IP地址和端口号对应电话号码。(通过IP地址可以定位到服务端,结合端口号可以定位到服务端里的一个应用程序)
客户端的Socket先连接到服务端负责监听的Socket。服务端检测到连接后创建一个负责通信的Socket,这个Socket通过Receive()和Send()函数和客户端的Socket收发消息。
服务端代码server.cs
(可以对照上面流程图来理解)
using System;
using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using System.IO;
public class server : MonoBehaviour
{
private string info = "NULL"; //状态信息
private string recMes = "NULL"; //接收到的信息
private int recTimes = 0; //接收到的信息次数
private string inputIp = "10.250.27.220"; //服务端ip地址;可以手动在服务端电脑-cmd- ipconfig 获取IPV4地址
private string inputPort = "50000"; //端口值,大于50000比较保险
private string inputMessage = "NULL"; //用以发送的信息
private Socket socketWatch; //用以监听的套接字
private Socket socketSend; //用以和客户端通信的套接字
private bool isSendData = false; //是否点击发送数据按钮
private bool clickConnectBtn = false; //是否点击监听按钮
void Start()
{
}
// Update is called once per frame
void Update()
{
}
//点击开始监听后执行
private void ClickConnect()
{
try
{
int _port = Convert.ToInt32(inputPort); //端口号转为int
clickConnectBtn = true; //点击了监听按钮
//第一步:创建负责监听的Socket
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//参数说明:IPV4对应InterNetwork;Tcp对应Stream
//用DNS类获得本机的IPV4地址,即IPHost.AddressList[2],是IPAddress格式
IPHostEntry IPHost = Dns.Resolve(Dns.GetHostName());
string _ip = Convert.ToString(IPHost.AddressList[2]);
inputIp = _ip;//方便后面显示本机IP
Debug.Log(" ip 地址是 :" + _ip);
Debug.Log(" 端口号是 :" + _port);
info = "ip地址是 : " + _ip + "端口号是 : " + _port;
//第二步:为Socket寻址(命名),即绑定IP地址和端口号
IPEndPoint point = new IPEndPoint(IPHost.AddressList[2], _port);
socketWatch.Bind(point); //绑定
Debug.Log("监听成功!");
info = "监听成功";