C#——Socket
最近公司让我搞个socket小程序(服务端)。
主要的功能:客户端发字符串到服务端,服务端接收后在界面上显示。
参照了网上许多代码,自己从中修改整理代码。
- public Form4()
- {
- InitializeComponent();
- this.Width = ;
- this.Height = ;
- this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
- this.WindowState = FormWindowState.Maximized;
- System.Timers.Timer timer = new System.Timers.Timer();
- timer.Enabled = true;
- timer.Interval = ;//执行间隔时间,单位为毫秒
- timer.Start();
- timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
- //设置IP和端口
- SetServerIPAndPort();
- }
- /// <summary>
- /// 根据当前程序目录的文本文件‘ServerIPAndPort.txt’内容来设定IP和端口
- /// 格式:127.0.0.1:8885
- /// </summary>
- private void SetServerIPAndPort()
- {
- try
- {
- FileStream fs = new FileStream("ServerIPAndPort.txt", FileMode.Open);
- StreamReader sr = new StreamReader(fs);
- string IPAndPort = sr.ReadLine();
- ServerIP = IPAndPort.Split(':')[]; //设定IP
- //ServerIP = GetLocalIPAddress();//设定IP
- port = int.Parse(IPAndPort.Split(':')[]); //设定端口
- Timer_out = int.Parse(IPAndPort.Split(':')[]);//设定连接超时时间(毫秒)
- ipEnd = new IPEndPoint(IPAddress.Parse(ServerIP), port);
- //定义套接字类型
- serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- //连接
- serverSocket.Bind(ipEnd);
- //开始侦听
- serverSocket.Listen();
- //AddItemToListBox(string.Format("开始在{0}监听连接", ServerIP, port));
- Thread myThread = new Thread(ListenClientConnect);
- myThread.Start();
- sr.Close();
- fs.Close();
- }
- catch (Exception ex)
- {
- MessageBox.Show("配置IP与端口失败,错误原因:" + ex.Message);
- Application.Exit();
- }
- }
- /// <summary>
- /// 监听客户端连接
- /// </summary>
- private void ListenClientConnect()
- {
- Socket clientSocket = null;
- while (true)
- {
- try
- {
- clientSocket = serverSocket.Accept();
- }
- catch {
- //当单击‘停止监听’或者退出此窗体时 AcceptTcpClient() 会产生异常
- //因此可以利用此异常退出循环
- break;
- }
- //clientSocket.Send(Encoding.ASCII.GetBytes("Server Say Hello"));
- Thread receiveThread = new Thread(ReceiveMessage);
- receiveThread.Start(clientSocket);
- }
- }
- /// <summary>
- /// 接收数据
- /// </summary>
- /// <param name="socket"></param>
- /// <param name="timeout"></param>
- /// <returns></returns>
- private string Receive(Socket socket)
- {
- string result = string.Empty;
- //socket.ReceiveTimeout = Timer_out * 1000 * 60;
- List<byte> data = new List<byte>();
- byte[] buffer = new byte[];
- int length = ;
- try
- {
- while ((length = socket.Receive(buffer)) > )
- {
- for (int j = ; j < length; j++)
- {
- data.Add(buffer[j]);
- }
- if (length < buffer.Length)
- {
- break;
- }
- }
- }
- catch { }
- if (data.Count > )
- {
- result = Encoding.Default.GetString(data.ToArray(), , data.Count);
- }
- return result;
- }
- /// <summary>
- /// 接收消息
- /// </summary>
- /// <param name="clientSocket"></param>
- private void ReceiveMessage(object clientSocket)
- {
- flg = true;
- myClientSocket = (Socket)clientSocket;
- byte[] result = new byte[];
- while (flg)
- {
- try
- {
- //通过clientSocket接收数据
- //int receiveNumber = myClientSocket.Receive(result,result.Length,0);
- //AddItemToListBox(Encoding.Unicode.GetString(result, 0, receiveNumber));
- AddItemToListBox(Receive(myClientSocket));
- flg = false;
- //break;
- }
- catch (Exception ex)
- {
- AddItemToListBox(ex.Message);
- myClientSocket.Shutdown(SocketShutdown.Both);
- myClientSocket.Close();
- break;
- }
- }
- }
C#——Socket的更多相关文章
- socket读写返回值的处理
在调用socket读写函数read(),write()时,都会有返回值.如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲 ...
- Socket聊天程序——Common
写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...
- Socket聊天程序——客户端
写在前面: 上周末抽点时间把自己写的一个简单Socket聊天程序的初始设计和服务端细化设计记录了一下,周二终于等来毕业前考的软考证书,然后接下来就是在加班的日子度过了,今天正好周五,打算把客户端的详细 ...
- Socket聊天程序——服务端
写在前面: 昨天在博客记录自己抽空写的一个Socket聊天程序的初始设计,那是这个程序的整体设计,为了完整性,今天把服务端的设计细化记录一下,首页贴出Socket聊天程序的服务端大体设计图,如下图: ...
- Socket聊天程序——初始设计
写在前面: 可能是临近期末了,各种课程设计接踵而来,最近在csdn上看到2个一样问答(问题A,问题B),那就是编写一个基于socket的聊天程序,正好最近刚用socket做了一些事,出于兴趣,自己抽了 ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- Android Socket连接PC出错问题及解决
最近测试问题:Android 通过Socket链接电脑,ip和端口都是正确的,也在同一网段,可android端就是报异常如下: 解决办法:测试电脑的防火墙可能开着,在控制面板把防火墙打开即可.
- Linux下的C Socket编程 -- server端的继续研究
Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...
- Mono 3.2.3 Socket功能迎来一稳定的版本
由于兴趣自己业余时间一直在搞.net下面的通讯应用,mono的存在得以让.NET程序轻松运行在Linux之下.不过经过多尝试Socket相关功能在Mono下的表现并不理想.不管性能还是吞吐能力方面离我 ...
- Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!
随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...
随机推荐
- Codeforces Round #474-B(贪心)
一.题目链接 http://codeforces.com/contest/960/problem/B 二.题意 给定三个数字$N, k1, k2$,接下来给出两组数$a[]$和$b[]$,每组数$N$ ...
- c#中的可选参数和命名参数的使用
C#4.0之后出现了一个可选参数这个特性. class Cal { static void Main(string[] args) { test1 t = new test1(); t.Add(, ) ...
- 熟悉下apple 马甲包
一.什么是马甲包 马甲包是利用App store 规则漏洞,通过技术手段,多次上架同一款产品的方法.马甲包和主产品包拥有同样的内容和功能,除了icon和应用名称不能完全一致,其他基本一致. 二.为什么 ...
- sonar link 的安装与使用
参考来源:https://jingyan.baidu.com/article/2a1383289bea98074a134ff6.html 工具/原料 版本要求Eclipse(4.2,3.8)以上, ...
- Eclipse去掉对jQuery的错误提示
1.I have found that I can leave the JavaScript Validator enable and ignore specific files by adding ...
- (转存)面向切面编程(AOP)的理解
面向切面编程(AOP)的理解 标签: aop编程 2010-06-14 20:17 45894人阅读 评论(11) 收藏 举报 分类: Spring(9) 在传统的编写业务逻辑处理代码时,我们通常 ...
- [ShaderStaff] 圆角矩形效果实现
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Unity2017.3 | Shader 最近在制作一款APP,其中需要对矩形图片资源的展现进行圆角化,看了一下网上的方案 ...
- Sqlserver filestream 引发文件数剧增
如果不使用checkpoint,文件数会剧增 参考:https://docs.microsoft.com/zh-cn/sql/relational-databases/logs/database-ch ...
- Linux学习---linux系统下安装配置Jenkins
1.首先准备java环境,安装JDK 2.下载jenkins至Linux服务器 下载地址:https://wiki.jenkins-ci.org/display/JENKINS/Installing+ ...
- Spring AOP底层原理
------------------siwuxie095 Spring AOP 底层原理 AOP 即 Aspect Or ...