初学者求教Socket程序问题!!!
Socket的server端代码没有问题,问题出在client端。之前使用没有问题,程序是从网上下的,刚自己编了一个client来测多数据量传输会不会出现问题,结果出现一个小问题不能理解。
问题是这样的:如果client代码的最后两句clientsocket.Send(Encoding.Unicode.GetBytes(Convert.ToString(i++)));
clientsocket.Receive(back);
不加的话client程序会卡死,好像clientsocket.Receive(back)接不到数据,但发的数据发过去了。不理解的
地方就在这,为什么只发一次接一次就有问题,如果在程序里再发一次接一次就没有问题了?望高手指点!
socket的server端代码:
static void Main()
{
IPAddress ip = IPAddress.Parse("127.0.0.1");//服务器IP地址
//实例化套接字
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//绑定套接字
serverSocket.Bind(new IPEndPoint(ip, myport));
//监听
serverSocket.Listen(10);
//Console.WriteLine("服务器已经启动");
Thread th = new Thread(listenclient);
th.Start();
//result = Encoding.Unicode.GetBytes("00000");
Application.Run(new Form1());
}
static void listenclient()//监听客户端
{
while (true)
{
Socket cliensocke = serverSocket.Accept();
//Console.WriteLine("IP{0}已经连接", cliensocke.RemoteEndPoint);
//cliensocke.Send(Encoding.Unicode.GetBytes("hello"));//为了确定连接
Thread th = new Thread(receivemessage);
th.Start(cliensocke);
}
}
static void receivemessage(object cliensocke)
{
Socket myclient = (Socket)cliensocke;
while (true)
{
try
{
//result = Encoding.Unicode.GetBytes("0");
num = myclient.Receive(result);
//Console.WriteLine("客户端发送的信息{0}", Encoding.Unicode.GetString(result, 0, num));
str = Encoding.Unicode.GetString(result, 0, num);
myclient.Send(Encoding.Unicode.GetBytes("ok"));
//Thread.Sleep(2000);
}
catch
{
//int num = myclient.Receive(result);
//Console.WriteLine("没有接收到信息");
return;
}
}
}
socket的client端代码:
namespace stability_test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
byte[] back = new byte[1024];
IPAddress ip = IPAddress.Parse("127.0.0.1");
IPEndPoint iep = new IPEndPoint(ip, 8889);
Socket clientsocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clientsocket.Connect(iep);
listBox1.Items.Clear();
//listBox1.Items.Add("9");
//clientsocket.Send(Encoding.Unicode.GetBytes("9"));
//clientso