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的基础上做的即时通讯,这个相信了解这个开源项目的也都知道 ...
随机推荐
- VS2015 C#6.0
VS2015 C#6.0 中的那些新特性 VS2015在自己机器上确实是装好了,(全部安装的话,在Java SE 开发工具包 会卡顿很长时间,我直接关闭,然后重启电脑,重新修复安装搞定), 想来体验一 ...
- fastjson初始化对性能的影响(转)
之前在项目中序列化是用thrift,性能一般,而且需要用编译器生成新的类,在序列化和反序列化的时候感觉很繁琐,因此想转到json阵营.对比了jackson,gson等框架之后,决定用fastjson, ...
- HDU 1054 Strategic Game(树形DP)
Problem Description Bob enjoys playing computer games, especially strategic games, but sometimes he ...
- Swift伟大的编程语言数据采集
Swift 2048 https://github.com/austinzheng/swift-2048 苹果官方Swift文档<The Swift Programming Language&g ...
- 2015西雅图微软总部MVP峰会
2015 西雅图微软总部MVP峰会记录 2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一 ...
- Swift开发学习(两):Playground
Swift开发学习:Playground 大约 对于软件用户.游戏玩家,我一直提倡用户体验.也是用户,是各种开发工具的使用者.也会喜欢用户体验做得好的工具软件.这次苹果想开发人员所想,提供了一个能够玩 ...
- JSP简单练习-站点计数器
<%@ page contentType="text/html;charset=gb2312" %> <%@ page import="javax.se ...
- Codeforces 327B-Hungry Sequence(素数筛)
B. Hungry Sequence time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- Team Foundation Server 2015使用教程--读取器tfs组的checkin权限修改
- linux VIM基本命令
linux VIM命令: vim 在命令行中输入vim,进入vim编辑器 Esc 退出i(插入)命令进行其他命令使用 :sh 进入shell命令行,运行完命令后ctrl+d退出又一次进入vim编辑继续 ...