c# TCP/IP编程
2016-01-22 11:06
393 查看
这东西很多朋友都有写过了,我也就写着玩玩,就当做个笔记吧。不废话了。
TCP/IP在数据通信中被广泛的使用,自然得包含客户端和服务端,当然,自己自言自语不是什么不可以,可那样貌似有点神经。
好了,那就先来建立服务端吧。
1、新建一个项目,就取名叫MyServer吧,然后敲入如下代码:
using System;
using System.Net;
using System.Net.Sockets;
namespace MyServer
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Server服务已启动……");
IPAddress ip = Dns.GetHostEntry("localhost").AddressList[0];
TcpListener listener = new TcpListener(ip, 250);
listener.Start(); // 开始侦听
Console.WriteLine("开始监听……");
Console.WriteLine("\n输入\"Q\"键退出。");
ConsoleKey key;
do
{
key = Console.ReadKey(true).Key;
}
while (key != ConsoleKey.Q);
}
}
}
好了,运行……显示服务已启动。
接下来看看我们监听的端口号250是不是已经在被监听状态。如下图:
2、好啦,一切正常。下面开始来编写客户端吧。
重新打开一个VS窗口,新建项目MyClient,然后录入如下代码:
using System;
using System.Net.Sockets;
namespace MyClient
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("客户端启动……");
TcpClient client = new TcpClient();
try
{
//与服务器连接
client.Connect("localhost", 250);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
}
// 打印连接到的服务端信息
Console.WriteLine("已经成功与客户端建立连接!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
Console.WriteLine("\n输入\"Q\"键退出。");
ConsoleKey key;
do
{
key = Console.ReadKey(true).Key;
}
while (key != ConsoleKey.Q);
}
}
}
看起来一切都是那么清晰明了,好啦,启动运行——沃日!没反应?打个断点跟踪一下试试?
看到那个异常了不?“由于目标计算机积极拒绝,无法连接。127.0.0.1:250”
靠,我的目标计算机这么积极的啊?是防火墙干的好事吗?关了——不行,一样。端口号被占用了?不能用250?那我换2500呢?多换几个试试……:-D:-D还是不可以的,说明没有端口号什么事。那程序运行权限不够?那我用管理员运行下试试——还是不行。这玩意儿真是不如WCF那么省心啊!
好吧,我把这localhost换成IP地址试试。先通过ipconfig看看自己的IP地址是什么,额,192.168.175.1,好吧,都换了。
服务端的IP那里换成:
IPAddress ip = IPAddress.Parse("192.168.175.1");
客户端那换成:
client.Connect(System.Net.IPAddress.Parse("192.168.175.1"), 2500);
再运行试试,通了通了,可以了诶!看下图:
呵呵呵,对了,看到上图中那两个端口号没?第一个来自客户端,是由客户端自个儿自己随机分配的,后面那个2500就是我们监听的服务器端的端口号(把250-->2500)
其实TCP/IP这东西啊,服务端和客户端,真是要在茫茫人海中,找到对方不容易啊。即使你知道她家在哪儿,而且还有她们家的钥匙,要是你在去她们家的路上遇到个程咬金挡路,不让你过去你也没办法。所以,为了能够顺利到她们家,我们就得想想其它办法了。也就是……回头有空的时候我再来写一下怎么确保顺利到达她们家吧。
TCP/IP在数据通信中被广泛的使用,自然得包含客户端和服务端,当然,自己自言自语不是什么不可以,可那样貌似有点神经。
好了,那就先来建立服务端吧。
1、新建一个项目,就取名叫MyServer吧,然后敲入如下代码:
using System;
using System.Net;
using System.Net.Sockets;
namespace MyServer
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Server服务已启动……");
IPAddress ip = Dns.GetHostEntry("localhost").AddressList[0];
TcpListener listener = new TcpListener(ip, 250);
listener.Start(); // 开始侦听
Console.WriteLine("开始监听……");
Console.WriteLine("\n输入\"Q\"键退出。");
ConsoleKey key;
do
{
key = Console.ReadKey(true).Key;
}
while (key != ConsoleKey.Q);
}
}
}
好了,运行……显示服务已启动。
接下来看看我们监听的端口号250是不是已经在被监听状态。如下图:
2、好啦,一切正常。下面开始来编写客户端吧。
重新打开一个VS窗口,新建项目MyClient,然后录入如下代码:
using System;
using System.Net.Sockets;
namespace MyClient
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("客户端启动……");
TcpClient client = new TcpClient();
try
{
//与服务器连接
client.Connect("localhost", 250);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
}
// 打印连接到的服务端信息
Console.WriteLine("已经成功与客户端建立连接!{0} --> {1}", client.Client.LocalEndPoint, client.Client.RemoteEndPoint);
Console.WriteLine("\n输入\"Q\"键退出。");
ConsoleKey key;
do
{
key = Console.ReadKey(true).Key;
}
while (key != ConsoleKey.Q);
}
}
}
看起来一切都是那么清晰明了,好啦,启动运行——沃日!没反应?打个断点跟踪一下试试?
看到那个异常了不?“由于目标计算机积极拒绝,无法连接。127.0.0.1:250”
靠,我的目标计算机这么积极的啊?是防火墙干的好事吗?关了——不行,一样。端口号被占用了?不能用250?那我换2500呢?多换几个试试……:-D:-D还是不可以的,说明没有端口号什么事。那程序运行权限不够?那我用管理员运行下试试——还是不行。这玩意儿真是不如WCF那么省心啊!
好吧,我把这localhost换成IP地址试试。先通过ipconfig看看自己的IP地址是什么,额,192.168.175.1,好吧,都换了。
服务端的IP那里换成:
IPAddress ip = IPAddress.Parse("192.168.175.1");
客户端那换成:
client.Connect(System.Net.IPAddress.Parse("192.168.175.1"), 2500);
再运行试试,通了通了,可以了诶!看下图:
呵呵呵,对了,看到上图中那两个端口号没?第一个来自客户端,是由客户端自个儿自己随机分配的,后面那个2500就是我们监听的服务器端的端口号(把250-->2500)
其实TCP/IP这东西啊,服务端和客户端,真是要在茫茫人海中,找到对方不容易啊。即使你知道她家在哪儿,而且还有她们家的钥匙,要是你在去她们家的路上遇到个程咬金挡路,不让你过去你也没办法。所以,为了能够顺利到她们家,我们就得想想其它办法了。也就是……回头有空的时候我再来写一下怎么确保顺利到达她们家吧。
相关文章推荐
- Android网络编程之使用HttpClient批量上传文件
- 深度学习与计算机视觉系列(10)_细说卷积神经网络
- POJ 3436 ACM Computer Factory(拆点+前向星dinic)||(拆点+邻接矩阵dinic)||(不拆点+dinic))
- 网络编程(自定义图形界面浏览器-Tomcat服务端). 模拟IE 的请求
- TCP/IP协议 三次握手与四次挥手
- unix网络编程I卷之关于wait在不同系统中的表现扩展出来的问题
- iOS开发工具——网络封包分析工具Charles
- Linux曲径通幽:常用命令(网络通信命令)
- android 判断网络状态 (无网络 wifi 数据流量)
- curl --connect-timeout 判断国内外网络windows 批处理
- ngcordova 监控网络制式改变
- HTTP protocal
- ios 开发网络篇 - 数据缓存
- HTTP对外接口,如何增加签名机制
- 九大全球网络攻击实时追踪系统盘点
- 《HTTP权威指南》-第7章 缓存
- 《HTTP权威指南》-第6章 代理
- 《HTTP权威指南》-第5章 Web服务器
- HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理。
- 提示网络状态并打开网络设置页面