Socket 学习(一)

本次项目增加的引用
using System.Net;
using System.Net.Sockets;
using System.Threading;
TextBox.CheckForIllegalCrossThreadCalls = false;//禁止多线程检查
Socket S1;//发送方套接字(本方)
Socket S2;//接收到的套接字(对方)
Thread T1;
Thread T2;
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = !button1.Enabled;
S1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化自己的套接字
S1.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80));//绑定自己的终结点(有信息,请通过这个IP的这个端口发给我)
S1.Listen(10); // 侦听 参数的意思是最多连接数
T1 = new Thread(StartListen); //开启多线程 对侦听的信息做回应
T1.IsBackground = true;
T1.Start();
}
void StartListen()
{
while (true)
{
S2 = S1.Accept(); //Accept :返回接收套接字
textBox1.AppendText("客户端连接成功!" + "\r\n");
T2 = new Thread(TheadReceive);//多线程Receive
T2.IsBackground = true;
T2.Start();
}
}
void TheadReceive()
{
try
{
while (true)
{
byte[] ByteData = new byte[1024 * 1024]; //设置最大字节数1M
int length = S2.Receive(ByteData); // Receive:参数表示 接收方的套接字 内容,返回内容长度,最重要的 它监听过程中会阻断当前线程(就是说:接受了一次之后就终止了线程,循环,本次完成循环就终止了)
string Message = Encoding.UTF8.GetString(ByteData, 0, length);//byte转string
if (!string.IsNullOrEmpty(Message))
{
textBox1.AppendText(Message + "\r\n");
}
}
}
catch (SocketException SE)
{
textBox1.AppendText("连接断开"+"\r\n");
}
}
控件默认是单线程的,所以要禁止多线程检查,这样就不会报莫名奇怪的错了
这里的IP 和端口 是 表示 ,别人访问我,就要用此IP和 此端口 下面是客户端的

就4行代码
Socket S1;
Thread T1;
private void button1_Click(object sender, EventArgs e)
{
S1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
S1.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 80));
} private void button2_Click(object sender, EventArgs e)
{
S1.Send(Encoding.UTF8.GetBytes(textBox1.Text));
}
这里客户端存在一个问题,可以建立很多个连接,但是服务端不知道,因为服务端接收到的连接套接字 句柄 没次都可以不一样
这仅仅有 客户端发送和服务端接受的功能。
那么互相发送又该如何呢?多人通讯呢?
Socket 学习(一)的更多相关文章
- Socket 学习(三).4 UDP 穿透 客户端与客户端连接
效果图: 使用方法: 先 修改WinClient\bin\Debug 下面的 ip.ini,写上 服务器 IP地址. 客户端 与 客户端 通讯 之前 ,点击发送打洞消息 按钮,然后过一会再发送消息 ...
- Socket学习总结系列(二) -- CocoaAsyncSocket
这是系列的第二篇 这是这个系列文章的第二篇,要是没有看第一篇的还是建议看看第一篇,以为这个是接着第一篇梳理的 先大概的总结一下在上篇的文章中说的些内容: 1. 整理了一下做IM我们有那些途径,以及我们 ...
- 你也可以写个服务器 - C# Socket学习2
前言 这里说的服务器是Web服务器,是类似IIS.Tomcat之类的,用来响应浏览器请求的服务. Socket模拟浏览器的Url Get请求 首先浏览器的请求是HTTP协议.我们上一篇说过,HTTP是 ...
- 你也可以写个聊天程序 - C# Socket学习1
原文:你也可以写个聊天程序 - C# Socket学习1 简述 我们做软件工作的虽然每天都离不开网络,可网络协议细节却不是每个人都会接触和深入了解.我今天就来和大家一起学习下Socket,并写一个简单 ...
- python socket 学习
Python在网络通讯方面功能强大,今天学习一下Socket通讯的基本方式,分别是UDP通讯和TCP通讯. UDP通讯 upd 服务端 #!/usr/bin/env python # -*- codi ...
- socket学习笔记——实现收发文件(Windows)
记录下来,供自己学习! server.c #define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <stdlib.h ...
- Socket学习笔记
..........(此处略去万万字)学习中曲折的过程不介绍了,直接说结果 我的学习方法,问自己三个问题,学习过程将围绕这三个问题进行 what:socket是什么 why:为什么要使用socket ...
- C# Socket学习笔记二
小记:昨天咱们已经了解了Socket的通信原理,可是点对点的一次通信并不是我们想要的,那么今天那我们就继续学习异步通信,简单来说就是服务器端和客户端可以进行多次 互发信息的通信而不用担心通道会关闭.在 ...
- C# Socket学习笔记一
小记:刚接触网络编程觉得网络是个神奇的东西,所以对它就很有兴趣,想了解下网络是如何进行进行数据传输的,那么开始第一天的学习吧!ReadyGo!!! 首先我们要了解一下几点内容: 1.网络中进程之间如何 ...
- Socket学习总结系列(一) -- IM & Socket
写在准备动手的时候: Socket通讯在iOS中也是很常见,自己最近也一直在学习Telegram这个开源项目,Telegram就是在Socket的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...
随机推荐
- c++内存泄漏处理(积累)
写c++程序时,常常会出现内存泄漏的问题,这里从网上找了一种非常麻烦的方法:假设想找到每一个cpp文件的内存泄漏,都必须在每一个cpp加上例如以下代码: #include <crtdbg.h&g ...
- oracle一视图性能问题
oracle一些性能视图的解释 --关于是否收集 timed_statistics参数:用于决定是否收集相关的时间参数,true为收集.如果该参数设为false,则等待事件相关视图也就无法收集到数据 ...
- 第十七章——配置SQLServer(3)——配置“对即时负载的优化”
原文:第十七章--配置SQLServer(3)--配置"对即时负载的优化" 前言: 在第一次执行查询或者存储过程时,会创建执行计划并存储在SQLServer的过程缓存内存中.在很多 ...
- 通过ccb(CocosBuilder)文件生成cocos2dx代码
在C++下使用ccb.绑定调用,成员变量.让人头疼又easy犯错. 自己用pythong写了个小程序,通过ccb文件直接生成C++代码 python我用的不多.又是随性所做.代码质量就非常差.大家多多 ...
- hdu 4912 Paths on the tree(lca+馋)
意甲冠军:它使树m路径,当被问及选择尽可能多的路径,而这些路径不相交. 思考:贪心,比較忧伤.首先求一下每对路径的lca.依照lca的层数排序.在深一层的优先级高.那么就能够贪心了,每次选择层数最深的 ...
- state-of-the-art implementations related to visual recognition and search
http://rogerioferis.com/VisualRecognitionAndSearch2014/Resources.html Source Code Non-exhaustive lis ...
- Team Foundation Server 2015使用教程--tfs用户账号切换
- 致网友Wonderfei的一封信(怎样选择自己主动化框架的几点拙见)
注:本来这封信要发给Wonerfei网友的,可是由于每次仅仅能发200字,所以干脆贴到博客上,叫Wonderfei同学到这上面来看,也算是我自己的一个暂时总结吧.同一时候也希望大家给予Wonderfe ...
- tc-SRM-626-DIV1-250
枚举alice投掷骰子得到的结果的每一种情况极其数量. 枚举bob投掷骰子得到的结果的每一种情况极其数量. 然后枚举alice投掷骰子得到的结果的数量和bob投掷骰子比alice低的数量. 然后计算结 ...
- Oracle经常使用函数
Oracle经常使用函数 --TRUNC,TO_DATE,TO_CHAR,TO_NUMBER, SUBSTR,REPLACE.NVL .TRIM,wm_concat,upper, lower,leng ...