//创建单独的SOCKET通道来进行文件传输
Socket socket = this.Createnewsocket(conn, _hostName, 5656);
this.Excutecmd(_CmdSocket, "stor " + files[i].Name + "\r\n");
string str2 = this.getmessagenumber(this.Recvmessage(_CmdSocket, conn)); #region 创建新的套接字连接
private Socket Createnewsocket(string conn, string ip, int port)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(ip, port);
return socket;
} private string Recvmessage(Socket _CmdSocket, string conn)
{
string str = "";
while (true)
{
byte[] buffer = new byte[0x200];
_CmdSocket.ReceiveTimeout = 0x1d4c0;
int count = 0;
try
{
count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);
}
catch
{
this.writelog(DateTime.Now.ToString() + "|服务器未响应|超时退出!|失败", conn);
}
str = str + Encoding.Default.GetString(buffer, 0, count);
if (count < buffer.Length)
{
try
{
char[] separator = new char[] { '\n' };
string[] strArray = str.Split(separator);
if (str.Length > 2)
{
str = strArray[strArray.Length - 2];
}
else
{
str = strArray[0];
}
if (!str.Substring(3, 1).Equals(" "))
{
return this.Recvmessage(_CmdSocket, conn);
}
}
catch
{
}
return str;
}
}
}
private string getmessagenumber(string meg)
{
string str = "";
if (meg != "")
{
str = meg.Substring(0, 3);
}
return str;
}这是客户端
当执行string str2 = this.getmessagenumber(this.Recvmessage(_CmdSocket, conn));
调用 Recvmessage
执行到count = _CmdSocket.Receive(buffer, buffer.Length, SocketFlags.None);
到这就没反映了服务器以做了断口监听程序这是我在网上找到的代码。有什么方法解决呢
private void BeginListen()
{ IPAddress ServerIp = GetServerIP(); IPEndPoint iep = new IPEndPoint(ServerIp, 5657); socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); byte[] byteMessage = new byte[100]; this.label1.Text = iep.ToString(); socket.Bind(iep); // do while (true)
{ try
{ socket.Listen(5); Socket newSocket = socket.Accept(); newSocket.Receive(byteMessage); string sTime = DateTime.Now.ToShortTimeString(); string msg = sTime + ":" + "Message from:";
msg += newSocket.RemoteEndPoint.ToString() + Encoding.Default.GetString(byteMessage); listBox1.Items.Add(msg);
} catch (SocketException ex)
{ this.label1.Text += ex.ToString(); } } // while(byteMessage!=null); }这个服务器端的代码
是不是一直在监听没有给客户端返回值呀。
怎么写呀
你的服务器应该有send操作,客户机和服务器都在等待接收数据,这不行啊。
还有,你的listen别放在while里,应放在bind()之后
我这有个简单的,不难
客户机
private void button1_Click(object sender, EventArgs e)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("202.194.147.216"), 9000);
s.Connect(ipep);
string str = "i want to eat";
byte[]data=new byte[1024];
data = Encoding.ASCII.GetBytes(str);
label1.Text = data.Length.ToString();
s.Send(data, data.Length, SocketFlags.None);
}
public Form1()
{
InitializeComponent();
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9000);
s.Bind(ipep);
s.Listen(3);
Socket server = s.Accept();
byte[] data = new byte[1024];
int m = server.Receive(data, 100, SocketFlags.None);
label1.Text = Encoding.ASCII.GetString(data);
label2.Text = m.ToString();
//server.Receive(data);
}