帮我改下,c#的多客户端socket没做过,不知道怎么搞
新手,还望见谅服务端
private const int BufferSize = 1024;
private TcpListener listener;
private DataControl dc;
private SQLHelper sh;
private TcpClient remoteclient;
private DateTime time = DateTime.Now.ToLocalTime();
private delegate void threadTell();
private delegate void threadworkcontorl();
public Form1()
{
InitializeComponent();
t.TextAlign = HorizontalAlignment.Left;
dc = new DataControl();
sh = new SQLHelper();
}
private string getBindIp()
{
LocalIpConfig lic = new LocalIpConfig();
return lic.getIpBind();
}
private int getBindPort()
{
LocalIpConfig lic = new LocalIpConfig();
return Convert.ToInt32(lic.getPortBind());
}
private void socket()
{
if (getBindIp() != null)
{
IPAddress ip = IPAddress.Parse(getBindIp());
int port = getBindPort();
listener = new TcpListener(ip, getBindPort());
listener.Start(); // 开始侦听
sh.getConnection();
do
{
Thread th = new Thread(new ThreadStart(invoke));
th.IsBackground = false;
th.Start();
}while(true);
}
else
{
MessageBox.Show("未设置服务器IP和绑定端口!");
}
}
private void invoke()
{
threadTell tt = new threadTell(threadwordk);
this.BeginInvoke(tt);
}
private void workinvoke()
{
threadworkcontorl tdk = new threadworkcontorl(workcontrol);
this.BeginInvoke(tdk);
}
private void threadwordk()
{
remoteclient = listener.AcceptTcpClient();
remoteclient.Client.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, true);
Thread th2 = new Thread(new ThreadStart(workinvoke));
th2.Start();
//// 打印连接到的客户端信息
//t.AppendText("client connected!server:" + remoteclient.Client.LocalEndPoint.ToString() + ",client:" + remoteclient.Client.RemoteEndPoint.ToString() + "\n");
//// 获得流,并写入buffer中
//NetworkStream streamtoclient = remoteclient.GetStream();
//byte[] buffer = new byte[BufferSize];
//int bytesread = streamtoclient.Read(buffer, 0, BufferSize);
//// 获得请求的字符串
//string msg = Encoding.Unicode.GetString(buffer, 0, bytesread);
//DataObj da = new DataObj();
//da = dc.getDataObject(dc.getStr(msg)[0]);
//t.AppendText("sitecode=" + da.Sitecode + "时间:" + time.ToString("yyyy-mm-dd") + "[" + time.ToString("hh:mm:ss") + "]");
//if (sh.insertStream(da)) { t.AppendText("插入数据成功\n"); } else { t.AppendText("插入数据失败\n"); }
}
private void workcontrol()
{
// 打印连接到的客户端信息
t.AppendText("client connected!server:" + remoteclient.Client.LocalEndPoint.ToString() + ",client:" + remoteclient.Client.RemoteEndPoint.ToString() + "\n");
// 获得流,并写入buffer中
NetworkStream streamtoclient = remoteclient.GetStream();
byte[] buffer = new byte[BufferSize];
int bytesread = streamtoclient.Read(buffer, 0, BufferSize);
// 获得请求的字符串
string msg = Encoding.Unicode.GetString(buffer, 0, bytesread);
DataObj da = new DataObj();
da = dc.getDataObject(dc.getStr(msg)[0]);
t.AppendText("sitecode=" + da.Sitecode + "时间:" + time.ToString("yyyy-mm-dd") + "[" + time.ToString("hh:mm:ss") + "]");
if (sh.insertStream(da)) { t.AppendText("插入数据成功\n"); } else { t.AppendText("插入数据失败\n"); }
}
private void toolStripButton1_Click(object sender, EventArgs e)
{
socket();
}
帮帮忙 --------------------编程问答-------------------- 一个我经常参考的异步socket通信,看看
http://www.codeproject.com/KB/IP/AsyncSocketServerandClien.aspx
效果图:
补充:.NET技术 , C#