在winform中进行socket编程

nalisaki 2010-03-17 04:30:18
测试中,设计了两个winform,一个当作服务器端,一个当作客户端,主要是用来进行简单数据的通讯显示用的.这样做应该可以.在客户端中时,可以设计一个发送按钮,好做一点,但在服务器端时,要设计socket不间断地listen,不知道怎么实现,我用的是一个socket成员,但不知道在哪个事件结束后让一个socket变量一直运行.找了一下loadComplete事件,没有;当把socket建到main中时(已从服务器端的winform中删去socket成员),又不知道该如何获取服务器winform中的数据了.请指点.多谢!!!
...全文
303 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nalisaki 2010-03-18
  • 打赏
  • 举报
回复
回去做了一个测试,用事件搞好了,但看其他人的,都是用线程搞定的,试一下线程的了.结贴!
nalisaki 2010-03-17
  • 打赏
  • 举报
回复
下了几个例子回去研究下子
cqsfd 2010-03-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nacee 的回复:]

找了一下,也没找到socket的接收事件.
[/Quote]
一般是用异步接收的吧 接收完再自己写怎么怎么操作接受到的信息

不过本人对C#提供的异步不太感冒,不管它是否执行效率和开发效率高。我的做法是窗体只负责起通讯线程,服务端监听,接受信息,再操作什么的在这个新起的线程里执行;通信客户端窗体也是只负责起通讯线程,网络通信都交给该线程处理。
不要老想着C#很傻瓜的什么都给你提供好
nalisaki 2010-03-17
  • 打赏
  • 举报
回复
找了一下,也没找到socket的接收事件.
nalisaki 2010-03-17
  • 打赏
  • 举报
回复
当socket变量建在main中时,如下:
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Socket myServerSock;
IPEndPoint myServerEndPoint;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Server());

IPAddress ip = IPAddress.Parse();
myServerEndPoint = new IPEndPoint(ip, Convert.ToInt32(serverTxtPort.Text));
myServerSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
myServerSock.Bind(myServerEndPoint);
myServerSock.Listen(0);
只能做到这里了,访问不到Server里的控件的值,试着用了一下,controlCollection,没成功.
nalisaki 2010-03-17
  • 打赏
  • 举报
回复
服务器端的:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
namespace socketTest
{
public partial class Server : Form
{
public Server()
{
InitializeComponent();
}
client clientTest;
Socket myServerSock;
IPEndPoint myServerEndPoint;
public delegate void getServerIP(string iptxt);
public getServerIP setClientIP;
private void button1_Click(object sender, EventArgs e)
{
clientTest.Show(this);
}
private void serverRecvbt_Click(object sender, EventArgs e)
{
clientTest.Close();
this.Close();
}

private void Server_Load(object sender, EventArgs e)
{
serverTxtIP.Text = "127.0.0.1";
serverTxtPort.Text = "3000";
serverTxtSend.Text = "Nothing to response";
IPAddress ip = IPAddress.Parse();
myServerEndPoint = new IPEndPoint(ip, Convert.ToInt32 (serverTxtPort.Text));
myServerSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
myServerSock.Bind(myServerEndPoint);
myServerSock.Listen(0);
clientTest = new client();
//clientTest.setClientIP += setIP;
setClientIP += clientTest.setIP;
setClientIP(serverTxtIP.Text);
setClientIP -= clientTest.setIP;
setClientIP += clientTest.setPort;
setClientIP(serverTxtPort.Text);
setClientIP -= clientTest.setPort;
//myServerSock.c
}

private void serverTxtIP_TextChanged(object sender, EventArgs e)
{
//clientTest.Close();
//setClientIP += clientTest.setIP;
//setClientIP(serverTxtIP.Text);
//setClientIP -= clientTest.setIP;
//setClientIP += clientTest.setPort;
//setClientIP(serverTxtPort.Text);
//setClientIP -= clientTest.setPort;
}

private void serverTxtPort_TextChanged(object sender, EventArgs e)
{
//setClientIP += clientTest.setIP;
//setClientIP(serverTxtIP.Text);
//setClientIP -= clientTest.setIP;
//setClientIP += clientTest.setPort;
//setClientIP(serverTxtPort.Text);
//setClientIP -= clientTest.setPort;
}
}
}
fengjian_428 2010-03-17
  • 打赏
  • 举报
回复
看看你的代码

110,536

社区成员

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

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

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