2019-01-10 C#基于TCP、UDP协议的网络通信实现(unity)

#一、TCP协议:

TCP协议是面向有连接的,所以服务器要与客户端建立连接

服务器端:

```

using System;

using System.Net.Sockets;

using System.Net;

using System.Text;

public static void Main(string[] args){

//创建服务器

Socket server=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

IPAddress ip= IPAddress.Parse("192.168.32.60");//创建IP地址,可以是本机的私网IP

EndPoint ep=new IPEndPoint(ip,4567);//ip地址与端口号的组合,端口号大一些就

server.Bind(ep);//绑定EP

//服务器开始监听

server.Listen(100);//设置最大连接数量为100

Socket client= server.Accept();//获取客户端的socket,用来与客户端通信

//发送信息

string message="你好,我是服务器!";

byte[] data=Encoding.UTF8.GetBytes(message);//转成能传送的byte类型的数据

client.Send(data);

while(true){

int length= client.Receive(data);

message=Encoding.UTF8.GetString(data,0,length);

Console.WriteLine("客户端:"+message);

}

}

```

客户端:

```


public static void Main(string[] args)

{

//创建客户端

Socket client=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

//创建IP地址(IP地址和端口号是服务器端的,用来和服务器进行通信)

IPAddress ip=IPAddress.Parse("192.168.32.60");

EndPoint ep=new IPEndPoint(ip,4567);

//用来接服务器端的数据

byte[] data=new byte[1024];

int length=0;//数据的长度

string message;

//连接服务器

client.Connect(ep);

length= client.Receive(data);

message=Encoding.UTF8.GetString(data,0,length);

Console.WriteLine(message);

while(true){

message=Console.ReadLine();//发送信息

data=Encoding.UTF8.GetBytes(message);

client.Send(data);

}

}


```

效果(客户端可以一直向服务器发送消息,服务器也可以一直接收消息):

客户端:                                                    

    服务器:


基于unity的客户端与服务器通信,能一直向服务器发送消息

unity客户端代码:

```

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using System.Net.Sockets;

using System.Net;

using System.Text;

using System;

using UnityEngine.UI;

using System.Threading;

public class Client_UI : MonoBehaviour {

private  Socket client;//创建客户端

private IPAddress ip;

private EndPoint ep;

private byte[] data=new byte[1024];//用来接收和发送数据

private int length=0;

private string message;

public Text inputText;//输入栏

public Text outputText;//显示栏

private string allMessage;

public Button send;

private Thread t;

void Start () {

t = new Thread (SendMessageToServer);

client = new Socket (AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

//绑定IP地址和端口号

ip=IPAddress.Parse("192.168.32.60");

ep = new IPEndPoint (ip, 4567);

//连接服务器

client.Connect(ep);

length= client.Receive(data);

message=Encoding.UTF8.GetString(data,0,length);

allMessage=message+'\n';

outputText.text = allMessage;

}

public  void SendMessageToServer(){

  message = inputText.text;

inputText.text = " ";

  if (message != null && message != "") {

allMessage+=message+'\n';

outputText.text = allMessage;

data=Encoding.UTF8.GetBytes(message);

message = "";

client.Send(data);

}

}

}

```

效果:

unity客户端项目地址:https://download.csdn.net/download/hyy_sui_yuan/10572112

二、UDP协议

UDP是面向无连接的,所以客户端与服务器不需要建立连接

服务器端代码:

```

using System;

using System.Net.Sockets;

using System.Net;

using System.Text;

namespace C_高级课程练习

{

/// <summary>

/// Description of UDP_my.

/// </summary>

public class UDP_my

{

public UDP_my()

{

}

public static void Main(string[] args){

//建立udp服务器,参数2:udp协议以数据报的方式传输,参数3:UDP协议

Socket udpServer=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);

//为服务器绑定IP

IPAddress ip=IPAddress.Parse("192.168.32.60");

EndPoint ep=new IPEndPoint(ip,3456);

udpServer.Bind(ep);

//接收数据

EndPoint endP=new IPEndPoint(IPAddress.Any,0);

string message;

byte[] data=new byte[1024];

int length=0;

//把数据的来源放到第二个参数上

while(true){

length= udpServer.ReceiveFrom(data,ref endP);

message=Encoding.UTF8.GetString(data,0,length);

Console.WriteLine("从IP:" +(endP as IPEndPoint).Address +"取到了消息:"+message);

}

}

}

}

```

客户端代码:


```



using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using System.Net.Sockets;

using System.Net;

using System.Text;

using System;

using UnityEngine.UI;

using System.Threading;

public class Client_UI : MonoBehaviour {

private  Socket udpClient;//创建客户端

private IPAddress ip;

private EndPoint ep;

private byte[] data=new byte[2048];//用来接收和发送数据

private int length=0;

private string message;

public Text inputText;//输入栏

public Text outputText;//显示栏

private string allMessage;

void Start () {

UDPInit ();

}

private void UDPInit(){

//建立udp客户端,参数2:udp协议以数据报的方式传输,参数3:UDP协议

udpClient = new Socket (AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);

//发送信息准备工作

ip=IPAddress.Parse("192.168.32.60");

ep = new IPEndPoint (ip,3456);

}

public  void SendMessageToServer(){

message = inputText.text;//得到输入框中的信息

inputText.text="";

data=Encoding .UTF8.GetBytes(message);

allMessage+=message+'\n';

outputText.text = allMessage;//将要发送的信息显示出来

udpClient.SendTo(data,ep);

}

}

```

unity客户端demo:https://download.csdn.net/download/hyy_sui_yuan/10572119

服务器端运行效果:

客户端运行效果:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,600评论 0 3
  • 寻找童年 作者/清秋致远 我背着生活的调色板 走过想象的万水千山 驻足于黄昏的荒芜里 描摹着奔腾跳跃的童年 爱和记...
    清秋致远阅读 1,170评论 0 0
  • 14年初加入幸福进化俱乐部,从7月份接触“掌控每一天”的课程开始,就一直紧跟在永澄老师后面学习。也是从那时开始,明...
    丛丛xu阅读 3,544评论 3 1
  • 犹记得那是小学一年级的事。 那天早上,小飞机他们一群九个男生都没有到校上课,老师说是因为他们"中毒了"。 当时还不...
    大侠三剑客阅读 5,688评论 0 0
  • 最近对一句话“不忘初心,方得始终”有了特别深的感触。小到一件事情,一个班级,大到一个家庭,一个团体,一个国家,真是...
    苏苏21阅读 2,981评论 0 3