初学C#的SOCKET编程,照着网上的代码写下来,程序总是有问题,经过自己长时间的调试,完成程序,以下是原码,有需要可以参考一下,还不完善,欢迎大家批评指正。(这里的代码没更新,附件重新上传更新,在另一个线程中使用委托来修改控件的属性,发送广播功能还有问题,稍修更新修正。)
环境:VS2008 .NET3.5
网上给出的程序都是控制台程序,我这个是WINFORM程序。有详细的说明,以服务端程序。
需要增加的命名空间:
using System.Threading;
using System.Net;
using System.Net.Sockets;
以下是具体实现。
namespace TCPServer
{
        public partial class Form1 : Form
        {
                public Form1()
                {
                        InitializeComponent();
                        
                }
                public bool btnstatu = true;    //开始停止服务按钮状态
                public Thread myThread;             //声明一个线程实例
                public Socket newsock;                //声明一个Socket实例
                public Socket Client;                    
                public IPEndPoint localEP;        
                public int localPort;
                public bool m_Listening;
                //用来设置服务端监听的端口号
                public int setPort                        
                {
                        get { return localPort; }
                        set { localPort = value; }
                }
                
                //用来往richtextbox框中显示消息
                public void showClientMsg(string msg)
                {
                        showClientMsg(msg+"\r\n");
                }
                //监听函数
                public void Listen()
                {     //设置端口
                        setPort=int.Parse(serverport.Text.Trim());
                        //初始化SOCKET实例
                        newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        //初始化终结点实例
                        localEP=new IPEndPoint(IPAddress.Any,setPort);
                        try
                        {
                                //绑定
                                newsock.Bind(localEP);
                                //监听
                                newsock.Listen(10);
                                //用于设置按钮状态
                                m_Listening = true;
                                //开始接受连接,异步。
                                newsock.BeginAccept(new AsyncCallback(OnConnectRequest), newsock);
                         }
                        catch (Exception ex)
                        {
                                showClientMsg(ex.Message);
                        }

                }
                //当有客户端连接时的处理
                public void OnConnectRequest(IAsyncResult ar)
                {
                     //初始化一个SOCKET,用于其它客户端的连接
                        Socket server1 = (Socket)ar.AsyncState;
                        Client = server1.EndAccept(ar);
                        //将要发送给连接上来的客户端的提示字符串
                        string strDateLine = "Welcome here";
                        Byte[] byteDateLine = System.Text.Encoding.ASCII.GetBytes(strDateLine);
                        //将提示信息发送给客户端
                        Client.Send(byteDateLine, byteDateLine.Length, 0);
                        //等待新的客户端连接
                        server1.BeginAccept(new AsyncCallback(OnConnectRequest), server1);
                        while (true)
                        {
                                int recv = Client.Receive(byteDateLine);
                                string stringdata = Encoding.ASCII.GetString(byteDateLine, 0, recv);
                                DateTimeOffset now = DateTimeOffset.Now;
                                //获取客户端的IP和端口
                                string ip = Client.RemoteEndPoint.ToString();
                                if (stringdata == "STOP")
                                {
                                        //当客户端终止连接时
                                        showinfo.AppendText(ip+"已从服务器断开");
                                        break;    
                                }
                                //显示客户端发送过来的信息
                                showinfo.AppendText(ip + "    " + now.ToString("G") + "     " + stringdata + "\r\n");                            
                        }
                                                
                }
            //开始停止服务按钮
                private void startService_Click(object sender, EventArgs e)
                {
                        //新建一个委托线程
                        ThreadStart myThreadDelegate = new ThreadStart(Listen);
                        //实例化新线程
                        myThread = new Thread(myThreadDelegate);
                            
                        if (btnstatu)
                        {
                                
                                myThread.Start();
                                statuBar.Text = "服务已启动,等待客户端连接";
                                btnstatu = false;
                                startService.Text = "停止服务";
                        }
                        else
                        {
                                //停止服务(功能还有问题,无法停止)
                                m_Listening = false;
                                newsock.Close();
                                myThread.Abort();
                                showClientMsg("服务器停止服务");
                                btnstatu = true;
                                startService.Text = "开始服务";
                                statuBar.Text = "服务已停止";
                                m_Listening = false;
                        }
                            
                }
                //窗口关闭时中止线程。
                private void Form1_FormClosing(object sender, FormClosingEventArgs e)
                {
                        if (myThread != null)
                        {
                                myThread.Abort();
                        }
                }
        }


}

转载于:https://blog.51cto.com/zhupengyue/324869

c# WINFORM SOCKET编程-简单聊天程序(服务端)相关推荐

  1. Netty的Socket编程详解-搭建服务端与客户端并进行数据传输

    场景 Netty在IDEA中搭建HelloWorld服务端并对Netty执行流程与重要组件进行介绍: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  2. python实现socket编程,客户端和服务端之间互相对话(二)

    首先运行服务端,处于监听状态: 最后运行客户端,就可以实现服务端和客户端之间互相发送消息. 客户端: import os import cv2 import socketremote_IP='127. ...

  3. Socket编程实践(6) --TCP服务端注意事项

    僵尸进程处理 1)通过忽略SIGCHLD信号,避免僵尸进程 在server端代码中添加 signal(SIGCHLD, SIG_IGN); 2)通过wait/waitpid方法,解决僵尸进程 sign ...

  4. java socket编程实现聊天程序_java Socket编程 聊天程序 服务器端和客户端

    [java]代码库package com.gufengxiachen.sthreadchatapp; /** * @author GUXIA */ import java.io.BufferedRea ...

  5. linux网络编程之用socket实现简单客户端和服务端的通信(基于TCP)

    一.介绍基于TCP协议通过socket实现网络编程常用API 1.读者如果不是很熟悉,可以先看我之前写的几篇博客,有socket,地址结构的理解,更加方便读者理解 地址分别是: 1).http://b ...

  6. linux网络编程之用socket实现简单客户端和服务端的通信(基于UDP)

    1.sendto和recvfrom函数介绍 sendto(经socket传送数据) 相关函数 send , sendmsg,recv , recvfrom , socket 表头文件 #include ...

  7. 【已解决】关于Socket编程:客户端、服务端对象流交互数据丢失的问题

    文章目录 引言 (一) 问题引入 (二) 解决方法 (三) 解决原理 (四) 运行结果 (五) BUG心得 引言 之前发过一篇关于对象流丢失数据的问题的博客: https://blog.csdn.ne ...

  8. Socket编程简单示例

    传统Socket基于BIO实现一个简单的聊天服务器 服务端代码如下 publicclassMyServerSocket {publicstaticvoidmain(String[] args)thro ...

  9. python socket 网络聊天室_Python基于Socket实现简单聊天室

    本文实例为大家分享了Python基于Socket实现简单聊天室,供大家参考,具体内容如下 服务端 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Ti ...

最新文章

  1. 如何退出终端中的“git status”列表?
  2. feign调用如何传递token_feign加入熔断器之后转发不了token等header信息
  3. 049_汉字Unicode编码范围
  4. 070_html url编码
  5. c语言参数传入函数赋值后传出来,c语言第10次实验内容函数2邹显春.ppt
  6. 电脑ip4和ip6的怎么选择?
  7. 如何修改照片的尺寸大小
  8. 全球最大的搜索引擎排名~~~~~~~~!!!!
  9. 计算机专业考研难么,计算机专业考研难吗
  10. 仰望星空,脚踏实地 2016
  11. php通过imap获取腾讯企业邮箱信息后的解码处理
  12. 保护海洋主题的微信公众号图文排版必备素材集锦
  13. mysql引用表无效列_Mysql使用索引可能失效的场景
  14. C++中 =defaule 和 =delete 使用
  15. Python之Excel 优雅操作手法 精选
  16. 安装SeisMix计算跨密度混合面
  17. 网络安全-网站漏洞扫描器
  18. factoextra:多元统计方法的可视化PCA
  19. 软件生命周期模型(瀑布型、V模型、W模型、敏捷开发模型)
  20. 【JavaScript-17】BOM-04 获取页面宽高、盒子宽高

热门文章

  1. daterangepicker 使用方法总结
  2. nginx的upstream问题记录
  3. Telent 远程登录服务
  4. vim中使用sed去除网上copy的源代码行号和空格
  5. centos 的关机命令
  6. c# 调用音库开发英语单词记忆本
  7. WP7 APP 猜数字 V2.0 更新
  8. 学习CSS 不错网址
  9. 区别于2.4g 4.33的780m无线模块
  10. 硬盘和显卡的访问与控制(二)——《x86汇编语言:从实模式到保护模式》读书笔记02