c# 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这东西啊,服务端和客户端,真是要在茫茫人海中,找到对方不容易啊。即使你知道她家在哪儿,而且还有她们家的钥匙,要是你在去她们家的路上遇到个程咬金挡路,不让你过去你也没办法。所以,为了能够顺利到她们家,我们就得想想其它办法了。也就是……回头有空的时候我再来写一下怎么确保顺利到达她们家吧。
c# TCP/IP编程的更多相关文章
- linux tcp/ip编程和windows tcp/ip编程差别以及windows socket编程详解
最近要涉及对接现有应用visual c++开发的tcp客户端,花时间了解了下windows下tcp开发和linux的差别,从开发的角度而言,最大的差别是头文件(早期为了推广尽可能兼容,后面越来越扩展, ...
- TCP/IP编程 - 1) 基础知识
1. What Is a Socket?(什么是套接字) A socket is an abstraction through which an application may send and re ...
- 【python】TCP/IP编程
No1: [TCP] 客户端 import socket s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(('www.sina ...
- TCP/IP编程——基于TCP的半关闭
在TCP服务端和客户端建立连接之后服务端和客户端会分别有两个独立的输入流和输出流,而且相互对应.服务端的输出流对应于客户端的输入流,服务端的输入流对应于客户端的输出流.这是在建立连接之后的状态. 当我 ...
- TCP/IP 编程
http://www.cnblogs.com/ggjucheng/archive/2012/08/18/2645324.html
- TCP/IP的经典网络编程
TCP/IP网络编程之四书五经 ...
- TCP/IP之四书五经[转自2003.12程序员]
TCP/IP协议是当前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要.从应用上来说,现在直接利用C层次Socket API进行TCP/IP编程的人确实越来越少了,各种现成的框架( ...
- 标准C实现基于TCP/IP协议的文件传输
上学期集成程序设计的课堂作业,对于理解TCP/IP实现还是挺有帮助的. TCP/IP编程实现远程文件传输在LUNIX中一般都采用套接字(socket)系统调用. 采用客户/服务器模式,其程序编写步骤如 ...
- TCP/IP长连接和短连接
http://www.cnblogs.com/bigwalnut/articles/2129070.html TCP/IP通信程序设计的丰富多样性 刚接触TCP/IP通信设计的人根据范例可以很快编出一 ...
随机推荐
- 瞬间从IT屌丝变大神——命名规则
为了避免命名冲突,命名规则如下: 公共组件因为高度重用,,命名从简,不要加前缀. 各栏目的相应代码,需加前缀,前缀为工程师姓名拼音的首字母,例如:海子前缀为“hz_”,分隔符为下划线"_&q ...
- DWZ使用笔记
DWZ使用笔记 一.前言 在最近的一个项目中,引入了DWZ这个富客户端框架,算是一次尝试吧.期间也遇到不少问题,总算一一解决了.特以此文记之. 本人用的是dwz-ria-1.4.5+A ...
- Genesis-3D开源游戏引擎简介!
Genesis-3D由搜狐畅游公司超百人引擎研发团队历时数年耗费巨资自主研发,是国内外首款商业开源的3D游戏引擎平台.它包括跨平台渲染引擎.2D引擎.物理引擎.音效系统.粒子系统.动画系统.服务器引擎 ...
- Java NIO 缓冲区学习笔记
Buffer其实就是是一个容器对象,它包含一些要写入或者刚读出的数据.在NIO中加入Buffer对象,体现了新库与原I/O的一个重要区别.在面向流的I/O中,您将数据直接写入或者将数据直接读到Stre ...
- HDU 4901 The Romantic Hero (计数DP)
The Romantic Hero 题目链接: http://acm.hust.edu.cn/vjudge/contest/121349#problem/E Description There is ...
- RHEL安装配置JAVA
查看当前java版本 [root@esb-mmplus-04 ~]# java -version java version "1.6.0_24" OpenJDK Runtime E ...
- Spring入门(3)-Spring命名空间与Bean作用域
Spring入门(3)-Spring命名空间与Bean作用域 这篇文章主要介绍Spring的命名空间和Bean作用域 0. 目录 Spring命名空间 Bean作用域 1. Spring命名空间 在前 ...
- 栈的简单应用 HDU 1022 http://acm.hdu.edu.cn/showproblem.php?pid=1022
#include<stdio.h> #include<stack> #include<string.h> #define N 20 using namespace ...
- poj3083
Children of the Candy Corn Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8046 Accep ...
- 树莓派加入定时任务实现花生壳定时重启(linux的定时任务)
由于花生壳在linux下不稳定,联系开机一个星期左右会挂掉,所以要使用定时任务实现每小时刷新一次/启动一次. 使用的是linux下的定时任务crontab去实现. 实现步骤: 1.编辑/etc/cro ...