服务端程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | using System; using System.Net; using System.Net.Sockets; using System.Speech.Synthesis; using System.Text; using System.Threading; using System.Windows.Forms; namespace CallServer { public partial class Form1 : Form { public Form1() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false ; } /// <summary> /// 等待客户端的连接 并且创建与之通信的Socket /// </summary> Socket socketSend; void Listen(object o) { try { Socket socketWatch = o as Socket; while ( true ) { socketSend = socketWatch.Accept();//等待接收客户端连接 ShowMsg(socketSend.RemoteEndPoint.ToString() + ":" + "连接成功!" ); //开启一个新线程,执行接收消息方法 Thread r_thread = new Thread(Received); r_thread.IsBackground = true ; r_thread.Start(socketSend); } } catch { } } /// <summary> /// 服务器端不停的接收客户端发来的消息 /// </summary> /// <param name = "o" ></param> void Received(object o) { try { Socket socketSend = o as Socket; while ( true ) { //客户端连接服务器成功后,服务器接收客户端发送的消息 byte[] buffer = new byte[1024 * 1024 * 3]; //实际接收到的有效字节数 int len = socketSend.Receive(buffer); if (len == 0) { break; } string str = Encoding.UTF8.GetString(buffer, 0, len); ShowMsg(socketSend.RemoteEndPoint + ":" + str); //叫号 SpeakStr(str); } } catch { } } /// <summary> /// 服务器向客户端发送消息 /// </summary> /// <param name = "str" ></param> void Send(string str) { byte[] buffer = Encoding.UTF8.GetBytes(str); socketSend.Send(buffer); } StringBuilder buf = new StringBuilder(); void ShowMsg(string msg) { buf.Append(msg); buf.Append( "\n\r" ); this.txtContent.Text = buf.ToString(); } private void SpeakStr(string content) { //方式一 //SpeechVoiceSpeakFlags flag = SpeechVoiceSpeakFlags.SVSFlagsAsync; //SpVoice voice = new SpVoice(); //var aa = voice.GetVoices(string.Empty, string.Empty); //voice.Voice = voice.GetVoices(string.Empty, string.Empty).Item(0); //voice.Rate = 1;//阅读速度 //方式二 SpeechSynthesizer hello = new SpeechSynthesizer(); //string str = "请A001号到第一检查室检查" ; hello.Volume = 10; hello.Rate = -5;//-10-10,值越小,语速越慢 hello.Speak(content); //Speak(string),Speak加上字符串类型的参数 //Item(0)单词男声Sam //Item(1)单词男声Mike //Item(2)单词女声Mary //Item(3)中文发音,如果是英文,就依单词字母一个一个发音 //voice.Speak(content, flag); } private void btnSend_Click(object sender, EventArgs e) { Send(this.txtSendMessage.Text.Trim()+ "\n" ); } private void btnStartListener_Click(object sender, EventArgs e) { CreateListener(); } private void CreateListener() { try { //点击开始监听时 在服务端创建一个负责监听IP和端口号的Socket Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress. Any ; //创建对象端口 IPEndPoint point = new IPEndPoint(ip, Convert .ToInt32(txtPort.Text)); socketWatch.Bind(point);//绑定端口号 ShowMsg( "监听成功!" ); socketWatch.Listen(10);//设置监听 //创建监听线程 Thread thread = new Thread(Listen); thread.IsBackground = true ; thread.Start(socketWatch); } catch { } } } } |
客户端程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using System.Windows.Forms; namespace CallClient { public partial class Form1 : Form { public Form1() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false ; } Socket socketSend; private void btnStartListener_Click( object sender, EventArgs e) { try { //创建客户端Socket,获得远程ip和端口号 socketSend = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse( this .txtIP.Text); IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32( this .txtPort.Text)); socketSend.Connect(point); ShowMsg( "连接成功!" ); //开启新的线程,不停的接收服务器发来的消息 Thread c_thread = new Thread(Received); c_thread.IsBackground = true ; c_thread.Start(); } catch (Exception) { ShowMsg( "IP或者端口号错误..." ); } } void ShowMsg( string str) { this .txtContent.AppendText(str + "\r\n" ); } /// <summary> /// 接收服务端返回的消息 /// </summary> void Received() { while ( true ) { try { byte [] buffer = new byte [1024 * 1024 * 3]; //实际接收到的有效字节数 int len = socketSend.Receive(buffer); if (len == 0) { break ; } string str = Encoding.UTF8.GetString(buffer, 0, len); ShowMsg(socketSend.RemoteEndPoint + ":" + str); } catch { } } } private void btnSend_Click( object sender, EventArgs e) { try { string msg = this .txtSendMessage.Text.Trim()+ "\n\r" ; byte [] buffer = new byte [1024 * 1024 * 3]; buffer = Encoding.UTF8.GetBytes(msg); socketSend.Send(buffer); } catch { } } } } |
注:需先启动服务端程序,客户端程序发送消息时,需和服务端进行一次握手(个人理解)---确认连接成功......
博客内容主要用于日常学习记录,内容比较随意,如有问题,还需谅解!!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2017-08-15 Winform Chart
2016-08-15 android学习笔记16——对话框
2016-08-15 android学习笔记15——Galley