111,126
社区成员
发帖
与我相关
我的任务
分享
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;
namespace PPChat
{
public partial class testsocket : Form
{
protected static TcpListener tcpListener = null;//监听器
private static bool IsStart = false;//开始标记
private Socket mySocket = null;//连接进来的套接字
public testsocket()
{
InitializeComponent();
}
//打开连接
private void btnOpen_Click(object sender, EventArgs e)
{
try
{
tcpListener = new TcpListener(IPAddress.Parse("127.0.0.1"), 1234);
tcpListener.Start();
rtbMsg.AppendText("正在监听...");
//创建一个线程用于后台监听,不有线程不行??不是很明白
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(Listen));
thread.IsBackground = true;
btnOpen.Enabled = false;
thread.Start();//监听线程开始
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// /// 侦听函数 ///
private void Listen()
{
IsStart = true;
try
{
while (IsStart)
{//不断监听
if (tcpListener.Pending())
{
mySocket =tcpListener.AcceptSocket();//接收所有连接进来的套接字
Byte[] bs = new Byte[11111];//字节数组,用于传送字节数据
mySocket.Receive(bs);//接收数据并存入bs中
string message = System.Text.Encoding.UTF8.GetString(bs);//转换为UTF8格式字符串
rtbMsg.AppendText(message);//追加到接收框中
mySocket.Close();//应不应该关闭这个套接口呢?
}
System.Threading.Thread.Sleep(200);//线程挂起200ms..不然CPU狂飙哦..
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//发送函数
private void Send()
{
//Socket sock = null;
//sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 5000);
//sock.Connect(IPAddress.Parse("10.0.0.35"), 1234);
//if (sock.Connected)
// MessageBox.Show("OK");
string msg = "[15]说: " + txtSend.Text + "\n";//获取发送消息
//Byte[] outbytes = System.Text.Encoding.Default.GetBytes(msg.ToCharArray());
TcpClient tcp2 = new TcpClient();
tcp2.Connect(IPAddress.Parse("127.0.0.1"), 1234);//建立连接
NetworkStream ns = tcp2.GetStream();//提供用于网络访问的基础数据流。
StreamWriter sw = new StreamWriter(ns);
sw.Write(msg);
sw.Flush();
sw.Close();
tcp2.Close();
txtSend.Clear();
}
//监听停止
private void btnStop_Click(object sender, EventArgs e)
{
IsStart = false;//开始设为false
tcpListener.Stop();//关闭监听
rtbMsg.AppendText("监听停止");
btnOpen.Enabled = true;
}
//发送信息函数
private void btnSend_Click(object sender, EventArgs e)
{
Send();
}
}
}
tcpListener.AcceptSocket();tcpListener.AcceptTcpClient(); Byte[] outbytes = System.Text.Encoding.Default.GetBytes(msg.ToCharArray());
//TcpClient tcp2 = new TcpClient();
//tcp2.Connect(IPAddress.Parse("127.0.0.1"), 1234);//建立连接
//NetworkStream ns = tcp2.GetStream();//提供用于网络访问的基础数据流。
//StreamWriter sw = new StreamWriter(ns);
//sw.Write(msg);
//sw.Flush();
//sw.Close();
//tcp2.Close();
IPEndPoint ipe = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
Socket clientSocket = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
clientSocket.Connect(ipe);
if (clientSocket.Connected)
clientSocket.Send(outbytes);
txtSend.Clear();