C#Socket编程 仿服务端与客户端 聊天
来源:互联网 发布:淘宝的吉他会是正品吗 编辑:程序博客网 时间:2024/06/07 03:05
服务器端
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace SocketDemo{ public partial class Serverce : Form { public Serverce() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false; } //用来存储客户端的连接对象 List<Socket> sockets = new List<Socket>(); private void btnConn_Click(object sender, EventArgs e) { //socket服务器端 //1.第一个协议 可使用的寻址方案 Ipv4 //2.第二个参数 设置数据传输方式 //3.第三个参数 设置传输协议 //1.创建socket对象 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); txtLog.Text = "创建服务器端\r\n" + txtLog.Text; //2.绑定Ip地址和端口号 IPAddress ipAddress = IPAddress.Parse(txtIP.Text); IPEndPoint endPoint = new IPEndPoint(ipAddress, Convert.ToInt32(txtPort.Text)); try { socket.Bind(endPoint); } catch { } //3.开启监听 socket.Listen(10); //开启线程 Thread thread = new Thread(StartAcceptClient); thread.IsBackground = true; thread.Start(socket); } //等待客户端连接 public void StartAcceptClient(object o) { Socket socket = o as Socket; while (true) { //4.等待客户端连接 Socket socketAccept = socket.Accept(); txtLog.Text = "[" + socketAccept.RemoteEndPoint + "]" + "连接成功:时间:" + DateTime.Now.ToString() + "\r\n" + txtLog.Text; //将客户端连接放入到集合中 sockets.Add(socketAccept); comboBox1.Items.Add(socketAccept.RemoteEndPoint); Thread thread = new Thread(GetMsgFromClient); thread.IsBackground = true; thread.Start(socketAccept); } } //接受客户端发来的信息 public void GetMsgFromClient(object socket) { Socket socketAccept = socket as Socket; try { while (true) { byte[] data = new byte[1024 * 1024]; int r = socketAccept.Receive(data, 0, data.Length, SocketFlags.None); if (r > 0) { txtLog.Text = "[" + socketAccept.RemoteEndPoint + "]" + "客户端发来的信息:" + Encoding.Default.GetString(data, 0, r) + "\r\n" + txtLog.Text; } else { socketAccept.Shutdown(SocketShutdown.Both); socketAccept.Close(); } } } catch { } finally { socketAccept.Shutdown(SocketShutdown.Both); socketAccept.Close(); } } //服务器给客户端发送消息 private void btnSend_Click(object sender, EventArgs e) { foreach (Socket socket in sockets) { //实现服务端与某个选定的客户端进行通信 if (socket.RemoteEndPoint.ToString() == comboBox1.SelectedItem.ToString()) { if (socket.Connected) { string str = txtSend.Text.Trim(); byte[] data = Encoding.Default.GetBytes(str); socket.Send(data, 0, data.Length, SocketFlags.None); } } } } //打开客户端 private void button1_Click(object sender, EventArgs e) { Customer customer = new Customer(); customer.Show(); } private void Serverce_Load(object sender, EventArgs e) { } }}
客户端
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace SocketDemo{ public partial class Customer : Form { public Customer() { InitializeComponent(); } private Socket socket = null; //连接 private void btnConn_Click(object sender, EventArgs e) { //连接协议Tcp协议 寻址方案Ipv4 套接字类型“流” socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //服务端Ip IPAddress ipAddress = IPAddress.Parse(txtIp.Text); //服务端端口号 IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, Convert.ToInt32(txtPort.Text)); //客户端连接到服务端 socket.Connect(ipEndPoint); Thread thread = new Thread(ReceiveDataFromServerce); thread.IsBackground = true; thread.Start(socket); } //接收客户端发送的消息 public void ReceiveDataFromServerce(object socket) { txtLog.Text = "连接成功"+txtLog.Text; Socket socketAccept = socket as Socket; //非正常关闭链接 try { while (true) { byte[] data = new byte[1024*1024]; int r = socketAccept.Receive(data, 0, data.Length, SocketFlags.None); if (r > 0) { txtLog.Text = DateTime.Now.ToString() + "[" + Encoding.Default.GetString(data, 0, r) + "]\r\n" + txtLog.Text; } else { socketAccept.Shutdown(SocketShutdown.Both); socketAccept.Close(); } } } catch { } //关闭客户端 finally { socketAccept.Shutdown(SocketShutdown.Both); socketAccept.Close(); } } //客户端发送消息 private void btnSend_Click(object sender, EventArgs e) { byte[] data = Encoding.Default.GetBytes(txtMsg.Text.Trim()); int r = socket.Send(data, 0, data.Length, SocketFlags.None); if (r>0) { } else { } } }}
阅读全文
0 0
- C#Socket编程 仿服务端与客户端 聊天
- 仿QQ聊天程序SOCKET编程服务端与客户端,成功通信
- java socket 服务端与客户端聊天
- C-socket编程-客户端服务端通信模型
- socket 编程之TCP服务端与客户端
- C# Socket编程 服务端与客户端(一)
- C# Socket编程 服务端与客户端(二)
- C# Socket编程 服务端与客户端(四) 异步服务端
- Socket客户端与服务端
- 基于Java Socket客户端、服务端聊天雏形
- C#Socket编程多客户端基于同一服务端通信
- Socket编程_tcp客户端服务端
- Linux 下socket编程客户端与服务端代码
- C++ socket编程 实现服务端与客户端的通讯
- ios socket编程初步:iphone客户端与java服务端通信
- Linux 下socket编程客户端与服务端代码
- socket编程 实现服务端与客户端的通讯
- C++ socket编程 实现服务端与客户端的通讯
- rabbitmq的一些基本安装以及命令
- Android路由框架Router的分析
- 三六、vue中使用animate.css
- apk安装时so库存放路径
- java函数定义的格式与练习
- C#Socket编程 仿服务端与客户端 聊天
- 232. Implement Queue using Stacks
- C#Des加密&解密
- hibernate的hibernate.cfg.xml的用户名密码加密
- 文章标题
- java文档去除空格和空白的方法
- leetcode 173. Binary Search Tree Iterator
- CSS简介与选择器优先级
- VS资源文件和外部依赖项