丛林战争项目一之TCP客户端、服务端的编写
来源:互联网 发布:idc国际数据公司 编辑:程序博客网 时间:2024/05/04 22:30
一、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 符号服务器”-->确定
- 丛林战争项目一之TCP客户端、服务端的编写
- 项目服务端的创建(丛林战争项目)
- 丛林战争项目五之TCP协议的粘包和分包
- 丛林战争项目六之在客户端发送数据的时候加上数据长度
- 客户端框架的搭建(丛林战争项目)
- 丛林战争项目十之数据库查询
- 丛林战争项目三之开启异步处理客户端连接请求
- 丛林战争项目四之客户端连接正常和非正常关闭
- 丛林战争项目二之实现服务器端异步的消息接收
- 数据库操作之增加数据(丛林战争项目)
- 丛林战争项目七之在服务器端解析数据
- 丛林战争项目八之Workbench创建数据库和表
- 丛林战争项目九之引入MySql.Data.dll
- MySQL数据库的更新和删除(丛林战争项目)
- [GoLang]GO语言编写的简易TCP服务端、客户端
- 服务器端分层架构(丛林战争项目)
- 开发登陆按钮(丛林战争项目)
- php编写TCP服务端和客户端程序
- JAVA FTPClient——远程文件操作
- CSS书写规范
- web.xml配置之<context-param>、 </init-param>详解
- 005_ServletContext
- 作业帮从科普切入,能否成K12在线教育的一支奇兵?
- 丛林战争项目一之TCP客户端、服务端的编写
- Command `run-android(ios)` unrecognized.
- 定销房概念扫盲
- 从零开始学 Java
- CuteFTP、FlashFXP、FileZilla 基本应用比较
- oracle datetime 时间类型比较
- 【leetcode_easy】104-MaximumDepthofBinaryTree
- github删除错误的commit并保留之前的提交
- ZooKeeper简介