关于Socket通信

aith1986 2009-04-04 04:07:40

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();
}
}
}

小弟在自己机子上试写Socket通信,为什么点了发送按钮后没执行接受端监听函数里的Receive()这个函数
...全文
142 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
aith1986 2009-04-05
  • 打赏
  • 举报
回复
解决了,谢谢大家
genius_tong 2009-04-04
  • 打赏
  • 举报
回复
UP~
程序员Linc 2009-04-04
  • 打赏
  • 举报
回复
...
zzxap 2009-04-04
  • 打赏
  • 举报
回复
http://hi.baidu.com/jackeyrain/blog/item/98cdfea8b5dba3b7cb130cdd.html

[code=C#]
C#的TCPClient连接(转)
2007-05-25 14:12
using System.Net;
using System.Net.Sockets;
TcpClient tcpClient = new TcpClient();
tcpClient.Connect("192.168.0.80", 23);
try
{
byte[] Data = new Byte[1024];
NetworkStream nsData = tcpClient.GetStream();
Int32 bytes=nsData.Read(Data, 0, Data.Length);
string receiveData = Encoding.ASCII.GetString(Data, 0, bytes);
tcpClient.Close();
this.textBox1.Text = receiveData;
}
catch
{
MessageBox.Show(e.ToString());
}
获取本机IP的方法:
System.Net.IPAddress addr = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address);

string s =null;
IPAddress[] addressList =new Dns.GetHostByName(Dns.GetHostName()).AddressList;
for (int i = 0; i < addressList.Length; i++)
{
s += addressList[i].ToString();
MessageBox.Show(s);
}

//MSDN推荐采用Dns.GetHostEntry方法
string addressIP = null;
string hostName = Dns.GetHostName(); //获取主机名
IPAddress[] addressIPList = Dns.GetHostEntry(hostName).AddressList;
for (int i = 0; i < addressIPList.Length; i++)
{
addressIP = addressIPList[i].ToString();
MessageBox.Show(addressIP);
}
[/CODE]
zzxap 2009-04-04
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20080327/01/e0818d51-d804-4b04-98aa-7135df8cdb7c.html?477775313
捷哥1999 2009-04-04
  • 打赏
  • 举报
回复
如果你要用TcpClient连接TcpListener的话,好像不应该用
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();

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧