您的位置:首页 > 理论基础 > 计算机网络

丛林战争项目一之TCP客户端、服务端的编写

2017-11-06 15:05 211 查看
一、IP

IP的主要作用就是在复杂的网络环境中将数据包发送给最终的目标地址

1.局域网ip,局域网ip在局域网内是独一无二的

打开控制台,输入ipconfig,输出的IPv4就是本机的地址,一般情况下局域网ip是由192.168.开头的



2.外网ip是共享的,可以通过在浏览器中输入ip进行查询



3.端口号

端口号代表和电脑上的哪个软件进行通信。通过ip找到机器,通过端口号找到和哪个软件进行通信

一般知名端口号在0~1023之间,而我们经常使用的自定义/动态分配的端口号则一般在49152~65535之间

二、TCP与UDP

1.UDP:发送数据迅速,不会管数据是否正确

TCP:发送准确,速度比较慢

2.TCP的三次握手



三、创建服务器端控制台应用程序

1.打开visual studio 2017,文件-->新建-->项目-->Visual C#-->控制台应用(.NET Framework)-->确定



2.创建成功



四、创建服务器端Socket并绑定IP和端口号

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;

namespace TCP_WebServer
{
class Program
{
static void Main(string[] args)
{

//服务端的开发

//创建一个Socket
Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//192.168.1.7这个是本机的ipv4地址,这个地址是会变动的,路由器运行时间久了就会变化
//127.0.0.1是一个万用地址,如果是在本机上使用则是本机的地址,如果换一台机器,则是另一台机器的地址
//IPAddress:xxx.xx.xx.xx   IpEndPoint:xxx.xx.xx.xx:prot
//IPAddress iPAddress = new IPAddress(new byte[] { 192,168,1,7});   //这种方式通过传递一个数组将地址解析出来,但是这种方式不推荐
IPAddress ipAddress = IPAddress.Parse("192.168.1.7");                   //创建ip
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 180);            //绑定端口号
serverSocket.Bind(ipEndPoint);                                      //绑定ip和端口号
serverSocket.Listen(10);                                            //参数backLog为队列中最多可以处理监听多少个
Socket clientSocket = serverSocket.Accept();                        //接收一个客户端连接

//向客户端发送一条消息
String msg = "Hello client!你好......";                             //需要传递的内容
byte[] data = System.Text.Encoding.UTF8.GetBytes(msg);              //因为含有中文,所以需要使用一个可以将中文解析成byte数组的方法
clientSocket.Send(data);                                            //发送消息

//接收客户端的一条消息
byte[] dataBuffer = new byte[1024];                                                 //创建一个数组
int count = clientSocket.Receive(dataBuffer);                                       //接收到了多少数据
string msgReceive = System.Text.Encoding.UTF8.GetString(dataBuffer,0,count);        //从第0个字节开始读取,读取count个
Console.WriteLine(msgReceive);

Console.ReadKey();                                                  //运行完等待一段时间
clientSocket.Close();                                               //关闭客户端的Socket
serverSocket.Close();                                               //关闭服务器端的Socket
}
}
}


五、创建客户端

1.客户端代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;

namespace TCP_Client
{
class Program
{
static void Main(string[] args)
{
//创建socket
Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ipAddress = IPAddress.Parse("192.168.1.7");               //创建ip
IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 180);              //绑定端口号
clientSocket.Connect(ipEndPoint);                                   //与远程主机建立连接

//向客户端发送一条消息
byte[] data = new byte[1024];
int count = clientSocket.Receive(data);                             //接收数据
String msg = Encoding.UTF8.GetString(data, 0, count);
Console.Write(msg);

//接收客户端的一条消息
string s = Console.ReadLine();
Console.Write(s);
clientSocket.Send(Encoding.UTF8.GetBytes(s));

Console.ReadKey();
clientSocket.Close();                                               //

}
}
}


2.在项目的解决方案上点击鼠标左键-->添加-->新项目-->Visual C#项-->控制台应用-->TCP Client




六、运行

1.在项目上右键-->生成



2.右键-->在文件资源管理器中打开文件夹、



3.在文件夹bin下的debug文件夹中的TCP WebServer.exe为生成的文件



4.在visual studio中点击启动,启动服务端



5.双击运行客户端生成的文件



6.先运行服务端,后运行客户端,可以看到客户端出现从服务端发过来的消息



7.在客户端输入内容后可以在服务端收到,左边的界面为服务端,右边的界面为客户端



运行过程中出现的问题

1.“TCP WebServer.exe”(CLR v4.0.30319: DefaultDomain): 已加载“C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll”。无法查找或打开 PDB 文件。



原因:输入的ipd

 IPAddress ipAddress = IPAddress.Parse("192.168.1.7");               //创建ip

解决办法:工具-->选项-->调试-->常规-->启用源服务器支持-->确定



2.调试-->符号-->勾选“Microsoft 符号服务器”-->确定

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: