Socket服务器与客户端双向通信实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Socket服务器与客户端双向通信实例
using System;
using System.Collections.Generic;
using ponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ;
using .Sockets;//添加命名空间
using System.Threading;//添加命名空间
namespace WFAsynSocket
{
public partial class Form1 : Form
{
Thread LisThread;
Socket LisSocket;
Socket newSocket;
EndPoint point;
string strmes = String.Empty;
int port = 8000;//定义侦听端口号
public Form1()
{
InitializeComponent();
}
private void btn_Listen_Click(object sender, EventArgs e)
{
LisThread = new Thread(new ThreadStart(BeginListern));//开线程执行BeginListern方法
LisThread.Start();//线程开始执行
}
public IPAddress GetIP()
{ /*获取本地服务器的ip地址 */
IPHostEntry iep = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ip = iep.AddressList[0];
return ip;
}
public void BeginListern()
{
LisSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, Proto colType.Tcp);//实例化Socket
IPAddress ServerIp = GetIP();/*获取本地服务器的ip地址 */
IPEndPoint iep = new IPEndPoint(ServerIp, port);
LisSocket.Bind(iep); /*将Socket绑定ip */
toolStripStatusLabel1.Text = iep.ToString() + "正在监听";
LisSocket.Listen(50); //Socket开始监听
newSocket = LisSocket.Accept();//获取连接请求的Socket
/*接收客户端Socket所发的信息 */
while (true)
{
try
{
byte[] byteMessage = new byte[100];
newSocket.Receive(byteMessage);//接收信息
MessageBox.Show(Encoding.Default.GetString(byteMessage));
Control.CheckForIllegalCrossThreadCalls = false;
point = newSocket.RemoteEndPoint;//获取客户端的Socket的相关信息 IPEndPoint IPpoint = (IPEndPoint)point;
strmes+=IPpoint.Address.ToString()+ " " +DateTime.Now.ToString()+"说"+Encoding.Default.GetString(byteMessage).Trim(new char[] { '\0' })+"\r\n";
this.richTextBox1.Text=strmes;
}
catch (SocketException ex)
{
toolStripStatusLabel1.Text += ex.ToString();
}
}
}
private void btn_Cancel_Click(object sender, EventArgs e)
{
try
{
LisSocket.Close();//关闭Socket
LisThread.Abort();//线程停止
LisThread=null;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
Application.Exit();
}
}
private void btn_Send_Click(object sender, EventArgs e)
{
byte[] byteData = Encoding.Default.GetBytes(this.richTextBox2.Text); newSocket.Send(byteData);//发送信息即由服务器往客户端上发信息
}
}
}
点击开始监听按钮之后
客户端则只要使用Socket去连接到服务器端的Socket就可实现往服务器上发信息using System;
using System.Collections.Generic;
using ponentModel;
using System.Data;