Socket文件传送~!急。在线等待~!!up~也有分~!
我的一个小domo希望大家帮我改改~!报错:
通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
这个是发送端~!!!
private void SocketSend()
{
System.Net.Sockets.Socket SendSocket = new System.Net.Sockets.Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse( "127.0.0.1 "),80);
FileStream fileSteam = new FileStream(Server.MapPath( "myFile.txt "),FileMode.OpenOrCreate,FileAccess.Read);
Byte[] fsSize = new byte[fileSteam.Length-1];
BinaryReader reader = new BinaryReader(fileSteam);
reader.Read(fsSize,0,(int)fileSteam.Length-1);
SendSocket.Connect(endPoint);
SendSocket.Send(fsSize);
fileSteam.Close();
SendSocket.Shutdown(SocketShutdown.Send);
SendSocket.Close();
}
[解决办法]
IPEndPoint hostPoint = new IPEndPoint(IPAddress.Parse( "127.0.0.1 "),80);
不要用80端口。换一个1980
[解决办法]
同意楼上的!
[解决办法]
学习
[解决办法]
to 上面那位大哥,你是放系网站里运行的么?我代码类似过我先前看的那段。我试过换左公网IP的时间不行阿。只有本机IP才行阿。(asp.net)
[解决办法]
80端口是系统默认的http端口,一般情况都是系统自动打开的,
一般用户自定义端口都用2000后,反正就是不要与常用的那些冲突。
而且你客户端进行连接时,报错【由于目标机器积极拒绝,无法连接。】的话,是你服务端没有打开这个端口,或者打开了端口,但是服务端有防火墙。
[解决办法]
由于目标机器积极拒绝
是你代码问题
你不要先急着关闭socket
[解决办法]
“由于目标机器积极拒绝,无法连接”是由于你的端口监听不正确,保证双方监听的是同一个端口
[解决办法]
up
[解决办法]
主要原因是你在同一台机子上用同一个端口又发送又接收
你把接收端放到另一台计算机上 IP也要改过来
或者接收端用TCPListener直接监听。如TcpListener mylisten=new TcpListener(800);
[解决办法]
up~!
[解决办法]
up
[解决办法]
(通常每个套接字地址(协议/网络地址/端口)只允许使用一次)
提示这个一般是端口重复或同一个套接字在多个程序中同时使用等等!
[解决办法]
试试把发送房和接收方程序放在不同的机器上
[解决办法]
UP..
[解决办法]
127.0.0.1 要2个程序放在一个机器上
端口换2000+的
[解决办法]
up
[解决办法]
up
[解决办法]
jf
[解决办法]
接受端:
Socket t_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
t_server.Bind(new IPEndPoint(IPAddress.Any, 2222));
t_server.Listen(2);
FileStream file = new FileStream (@ "d:\1.txt ",FileMode.Create );
byte[] buffer = new byte[1024];
Socket tmp = t_server.Accept();
int i =0;
while ((i = tmp.Receive(buffer)) != 0)
{
file.Write(buffer, 0, i);
}
file.Close();
发送端:
Socket t_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
t_client.Connect( "127.0.0.1 ", 2222);
t_client.SendFile(@ "d:\2.txt ");
t_client.Close();
[解决办法]
支持
[解决办法]
up
[解决办法]
你用TcpClient比较方便么
[解决办法]
这个问题在第一次做时没有出现过错,第二次时,出错了,只能在同一台上做收发。(代码一样)系统是换了,可能与有关设置联系了。没有找到原因
[解决办法]
看看这些
http://dev.yesky.com/msdn/182/2448182.shtml
http://www.enet.com.cn/article/2004/0810/A20040810332401.shtml
[解决办法]
其实很简单的 你的端口选不同的就可以了 规定的是一个 ip/port 不能被多个对象同时使用
[解决办法]
up
[解决办法]
再次up
[解决办法]
发送端连接远程主机的时候 SendSocket.Connect(endPoint);
这个endpoint的主机地址最好用Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
有时候用回环地址会有问题 你应该尽量模拟出是两台不同的主机
[解决办法]
楼主贴出的代码对于发送小文件本身没什么问题(端口别用80,一般已占了),出错是因为环境。程序写在了web里面,楼主是怎么测试发送和接收功能的。又是怎么设计的,怎么会在asp.net里面用到socket。
ps: 发送和接收端在同一机器没问题,另外不管是不是同一机器,当然监听和发送要用同一端口。
[解决办法]
up
[解决办法]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using System.Net;
using System.Net.Sockets;
namespace TestService
{
public partial class Service : Form
{
public Service()
{
InitializeComponent();
}
Thread ServiceStart = null;
TcpListener listerner = null;
private void Startbtu_Click(object sender, EventArgs e)
{
this.Startbtu.Enabled = false;
this.StopBtu.Enabled = true;
ServiceStart = new Thread(new ThreadStart(Start));
ServiceStart.Start();
}
void Start()
{
listerner = new TcpListener(8300);
listerner.Start();
while (true)
{
TcpClient client = null;
while (listerner.Pending())
{
client = listerner.AcceptTcpClient();
ThreadPool.QueueUserWorkItem(new WaitCallback(Process), client);
}
Thread.Sleep(100);
}
}
void Process(object state)
{
TcpClient client = (TcpClient)state;
StreamReader reader = null;
try
{
Stream stream = client.GetStream();
reader = new StreamReader(stream);
//StreamWriter writer = new StreamWriter(stream);
this.textBoxShow.Text = reader.ReadLine();
}
finally
{
reader.Close();
client.Close();
}
}
private void StopBtu_Click(object sender, EventArgs e)
{
this.Startbtu.Enabled = true;
this.StopBtu.Enabled = false;
this.ServiceStart.Abort();
this.ServiceStart = null;
this.listerner.Stop();
this.listerner = null;
}
}
}
//这个是service端的
/**/
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.Sockets;
using System.Net;
using System.IO;
namespace TestClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void buttonSend_Click(object sender, EventArgs e)
{
TcpClient client = new TcpClient( "localhost ", 8300);
StreamWriter writer = null;
// StreamReader reader = null;
string sInput = this.textBoxInput.Text;
try
{
writer = new StreamWriter(client.GetStream());
writer.WriteLine(sInput);
writer.Flush();
}
finally
{
writer.Close();
client.Close();
}
}
}
}
//这个是client端的,刚写的,可以用,试一下,把stream改成你对应的filestream就行
[解决办法]
先启动service端,然后按Startbtu_Click,在启动client,在textBoxInput里输点东西,按buttonSend_Click就可以了,windows form自己设计咯
[解决办法]
可以
[解决办法]
当然可以咯
[解决办法]
跟web服务器的默认端口冲突了
[解决办法]
那换个端口么
[解决办法]
UP