socket不能接受数据的问题

xiaoyegood 2006-08-18 12:08:51
写了一段socket传输文件的代码
但当客户端向服务器发送数据时报错:“由于套接字没有连接并且没有提供地址,发送或接受数据的请求没有被接受”
但连接还是正常能连上在接受数据时就出了这个问题
请大虾指点一下迷津
...全文
169 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yellow198267 2006-08-18
  • 打赏
  • 举报
回复
把代码弄出来看看
江城老温 2006-08-18
  • 打赏
  • 举报
回复
应该把代码帖出来的。方便找错误.
江城老温 2006-08-18
  • 打赏
  • 举报
回复
连接上之后还得为ClientSocket需要定义server端的IP地址和开放的端口(port)
Edifier0709 2006-08-18
  • 打赏
  • 举报
回复
首先,请你确定你的client确实连上server
xiaoyegood 2006-08-18
  • 打赏
  • 举报
回复
明白了谢谢大虾
www_123du_com 2006-08-18
  • 打赏
  • 举报
回复
服务器的代码:
sok.Accept();//这里会返回一个Socket,你应该用这个socket做数据传输操作

---->

socket client = sok.Accept();//而sok可以继续监听:或者在client处理完后继续监听,或者分配一个线程进行client的处理,sok继续循环监听
Koala_sea 2006-08-18
  • 打赏
  • 举报
回复
客户端
string ip_bj = Get_IP();
try
{
IPEndPoint hostEP=new IPEndPoint(IPAddress.Parse(textBox1.Text),int.Parse(textBox2.Text));
Socket mysocket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
mysocket.Connect(hostEP);
}
catch(Exception ex)
{
MessageBox.Show("连接错误\n\r"+ex.Message);
return;
}
byte[] msgx = Encoding.Default.GetBytes(ip_bj);
try
{
mysocket.Send(msgx);
}
catch
{
MessageBox.Show("发送错误");
}
byte[] bytes = new byte[1024];
int bytesRead=mysocket.Receive(bytes);
listBox1.Items.Add(Encoding.Default.GetString(bytes,0,bytesRead) + ""+DateTime.Now+"");
mysocket.Shutdown(SocketShutdown.Both);
mysocket.Close();
}
catch(Exception ex)
{
mysocket.Shutdown(SocketShutdown.Both);
mysocket.Close();
}

private string Get_IP()
{
IPAddress[] addressList = Dns.GetHostByName(Dns.GetHostName()).AddressList;
return addressList[0].ToString();
}


服务端

public static IPAddress GetServer_IP()
{

IPHostEntry ipDns=Dns.GetHostByName(Dns.GetHostName());
return ipDns.AddressList[0];
}

private void BeginListen()
{
IPAddress Server_Ip=GetServer_IP();
IPEndPoint ip=new IPEndPoint(Server_Ip,System.Convert.ToInt32(textBox1.Text.ToString()));
Socket Socket_IP=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
Socket_IP.Bind(ip);
while(true)
{
try
{
Socket_IP.Listen(5);
Socket Socket_Listen=Socket_IP.Accept();
byte[] byteMsg=new byte[1024];
int msg = Socket_Listen.Receive(byteMsg);
listBox1.Items.Add("Recive: " + Encoding.Default.GetString(byteMsg,0,msg) + " "+DateTime.Now+"");
byte[] msgx = Encoding.Default.GetBytes(textBox2.Text);
Socket_Listen.Send(msgx);
}
catch(SocketException ex)
{
MessageBox.Show(ex.Message);
}
}
}

记得给分
程勉超 2006-08-18
  • 打赏
  • 举报
回复
服务端的socket没有抓住这个connect
Koala_sea 2006-08-18
  • 打赏
  • 举报
回复
你的有点乱 我给你贴个代码吧
wmhnq 2006-08-18
  • 打赏
  • 举报
回复
我吐,这是什么代码啊
xiaoyegood 2006-08-18
  • 打赏
  • 举报
回复
代码如下
客户端:Socket sok = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ippoint =new IPEndPoint(IPAddress.Parse("192.168.3.13"),8080);
FileStream fs = new FileStream("D:\\Program\\实例代码\\Socket\\01.jpg",FileMode.OpenOrCreate,FileAccess.Read);
byte[] fssize=new byte[fs.Length];
BinaryReader strread = new BinaryReader(fs);
fs.Read(fssize, 0, fssize.Length-1);
strread.Read(fssize, 0, fssize.Length-1);
try
{
sok.Connect(ippoint);
}
catch
{
MessageBox.Show("服务未启动");
return;
}
sok.SendTo(fssize,ippoint);
label1.Text = fs.Length.ToString();
fs.Close();
sok.Shutdown(SocketShutdown.Send);
sok.Close();
服务器
Console.WriteLine("服务器启动!");
Socket sok = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint ipend = new IPEndPoint(IPAddress.Parse("192.168.3.13"),8080);
sok.Bind(ipend);
sok.Listen(2);
FileStream recfs = new FileStream("02.jpg",FileMode.OpenOrCreate);
byte[] recbyte = new byte[229888];
sok.Accept();
BinaryWriter newfilestr = new BinaryWriter(recfs);
sok.Receive(recbyte);
recfs.Write(recbyte, 0, recbyte.Length-1);
newfilestr.Write(recbyte, 0, recbyte.Length-1);
recfs.Close();
sok.Shutdown(SocketShutdown.Receive);
sok.Close();
Console.WriteLine("接受完毕");
Console.ReadLine();

110,536

社区成员

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

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

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