TcpClient 由于目标机器积极拒绝,无法连接问题

linjch 2009-11-06 12:02:38
做了个网络聊天工具,开着服务器,打开客户端,但就是连不了服务器,输入用户名,按登录,但一点反映都没有,不知道是什么问题,请各位高手指点指点!
Chatserver.cs:
IPAddress ipAdd = IPAddress.Parse("127.0.0.1");
txtHost.Text = "127.0.0.1";
listener = new TcpListener(ipAdd, port);
listener.Start();
lstInfo.Items.Add("服务器已经启动,正在监听" + txtHost.Text + ":" + txtPort.Text);
Thread thread = new Thread(new ThreadStart(this.StartListen));
thread.Start();
btnStart.Enabled = false;

login.cs:
tcpClient = new TcpClient();
tcpClient.Connect(IPAddress.Parse(txtHost.Text), Int32.Parse(txtPort.Text));
Alias = txtAlias.Text;
...全文
829 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
yyz985 2009-11-07
  • 打赏
  • 举报
回复
卡住说明端口侦听了,但没有Accept
你在Accept前后打断点看看
benbenRH 2009-11-07
  • 打赏
  • 举报
回复
顶一下!

不懂,这方面看起来很有趣,我也要编个玩一下!学习了!
linjch 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sharpe 的回复:]
引用 10 楼 linjch 的回复:
我搞错了,不是服务器积极拒绝,而是当点连接的时候就卡住了,一点反应也没有的!


你的客户端发送接收数据是什么样的? 界面卡住,是不是没有用新的线程来以接收数据?
[/Quote]

StartListen()方法
ServerClient()方法
sharpe 2009-11-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 linjch 的回复:]
我搞错了,不是服务器积极拒绝,而是当点连接的时候就卡住了,一点反应也没有的!
[/Quote]

你的客户端发送接收数据是什么样的? 界面卡住,是不是没有用新的线程来以接收数据?
linjch 2009-11-07
  • 打赏
  • 举报
回复
我搞错了,不是服务器积极拒绝,而是当点连接的时候就卡住了,一点反应也没有的!
sharpe 2009-11-07
  • 打赏
  • 举报
回复
你接收的连接Socket clientSocket = tmpSocket;
跟你发送的用的连接是同一个连接吗?
private void SendToClient(Client client, string msg)
{
System.Byte[] message = System.Text.Encoding.ASCII.GetBytes(msg.ToCharArray());
client.clientSocket.Send(message, message.Length, 0);
}

这两个clientSocket是同一个吗?
yyz985 2009-11-07
  • 打赏
  • 举报
回复
怀疑是防火墙拦截了,关闭防火墙试试
就算不Accept,只要Listen了就应当至少卡在那里而不是积极拒绝好像
mohugomohu 2009-11-07
  • 打赏
  • 举报
回复
打开该端口
hhc123 2009-11-07
  • 打赏
  • 举报
回复

private void ReceiveMsg()
{bool exitWhile = false;
while (exitWhile == false)
{
string receiveString = null;
try
{
receiveString = sr.ReadLine();
}
catch
{
SetListBox("接收失败");
}
if (receiveString == null)
{
SetListBox("失败");
break;
}
string[] splitString = receiveString.Split('|');
switch (splitString[0])
{
case "LOGINTRUE":
// SetListBox(splitString[1].ToString());
sw.WriteLine("LIST");
sw.Flush();

break;
case "LIST":
List(splitString);
break;
case"MSG":
SetListBox(splitString[1].ToString()+":"+splitString[2].ToString()+splitString[3].ToString());
TMessage.WinHand.Add(splitString[1].ToString(),splitString[3].ToString());

break;
case "FLIST":
Flist(splitString);
break;



}
hhc123 2009-11-07
  • 打赏
  • 举报
回复
bool keepConnect = true;
while (keepConnect)
{
}
不可以为true,不然一直在接收,不卡才怪
wjq 2009-11-06
  • 打赏
  • 举报
回复
你接收到客户机连接后执行了断开操作吧~
wuyq11 2009-11-06
  • 打赏
  • 举报
回复
如果是采用TCP/udp协议进行连接,检查windows防火墙是否开放相应SocketTCP/udp端口;

检查防火墙软件是否开放相应SocketTCP/udp端口;

服务器端和客户端均在本机上运行,则将相应的 serverIP="127.0.0.1",serveraddress="127.0.0.1";
服务器端侦听:
listener = new TcpListener(IPAddress.Parse(serverIP), listenport);
listener.Start();
客户端与服务器建立连接:
clientsocket = new TcpClient(serveraddress, serverport);

服务器运行在局域网或广域网内,则将相应的
serverIP,serveraddress设为本机所在局域网或广域网上的IP;
lerit 2009-11-06
  • 打赏
  • 举报
回复
服务器有防火墙,端口没有对外?
linjch 2009-11-06
  • 打赏
  • 举报
回复
代码应该没问题,下面是服务器端代码:
private void StartListen()
{
while (true)
{
try
{
Socket socket = listener.AcceptSocket();
tmpSocket = socket; //用tmpSocket保存发出请求的客户端实例
if (clients.Count >= MaxNum)
{
tmpSocket.Close();
}
else
{
Thread clientService = new Thread(new ThreadStart(this.ServiceClient));
clientService.Start();
}
}
catch (Exception ex)
{
lstInfo.Items.Add(ex.Message.ToString());
}
}
}

private void ServiceClient()
{
byte[] buff = new byte[1024];
Socket clientSocket = tmpSocket;
bool keepConnect = true;
while (keepConnect)
{
clientSocket.Receive(buff); //接收数据并存入buff数组中
//将字符数组转化为字符串
string clientCommand = System.Text.Encoding.ASCII.GetString(buff);
string[] tokens = clientCommand.Split(new Char[] { '|' });
if (tokens[0] == "CONN")
{
Client _client = new Client(tokens[1], clientSocket);
clients.Add(_client);
lstInfo.Items.Add(tokens[1] + "" + "has joined");
CurUserList.Items.Add(tokens[1]);
for (int i = 0; i < clients.Count; i++)
{
Client client = (Client)clients[i];
SendToClient(client, "JOIN|" + tokens[1] + "|");
Thread.Sleep(100);
string msgUsers = "LIST|" + GetUserList();
SendToClient(client, msgUsers);
}
}
if (tokens[0] == "CHAT")
{
for (int i = 0; i < clients.Count; i++)
{
Client client = (Client)clients[i];
SendToClient(client, tokens[1]);
}
}
if (tokens[0] == "PRIV")
{
string sender = tokens[1];
string receiver = tokens[2];
string content = tokens[3];
string message = sender + "send to" + receiver + ": " + content;
for (int i = 0; i < clients.Count; i++)
{
Client client = (Client)clients[i];
if (client.Name.CompareTo(tokens[2]) == 0)
SendToClient(client, message);
if (client.Name.CompareTo(tokens[1]) == 0)
SendToClient(client, message);
}
}
if (tokens[0] == "EXIT")
{
for (int i = 0; i < clients.Count; i++)
{
Client client = (Client)clients[i];
string message = tokens[1] + "has gone!";
SendToClient(client, message);
if (client.Name.CompareTo(tokens[1]) == 0)
{
clients.RemoveAt(i);
CurUserList.Items.Remove(client.Name);
message = "QUIT|";
SendToClient(client, message);
}
}
for (int i = 0; i < clients.Count; i++)
{
Client client = (Client)clients[i];
string message = "LIST|" + GetUserList();
SendToClient(client, message);
}
lstInfo.Items.Add(tokens[1] + "has gone!");
clientSocket.Close();
keepConnect = false;
}
}
}

private void SendToClient(Client client, string msg)
{
System.Byte[] message = System.Text.Encoding.ASCII.GetBytes(msg.ToCharArray());
client.clientSocket.Send(message, message.Length, 0);
}

private string GetUserList()
{
string Rtn = "";
for (int i = 0; i < clients.Count; i++)
{
Client client = (Client)clients[i];
Rtn = Rtn + client.Name + "|";
}
return Rtn;
}

public class Client
{
string name;
Socket clSocket;
public Client(string _name, Socket _socket)
{
name = _name;
clSocket = _socket;
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public Socket clientSocket
{
get
{
return clSocket;
}
set
{
clSocket = value;
}
}
}
sharpe 2009-11-06
  • 打赏
  • 举报
回复
你的this.StartListen是怎么写的?
监听连接了没有?
监听到有连接了,还要监听接收数据。。
Socket s = listener.AcceptSocket();
s.Receive()
xray2005 2009-11-06
  • 打赏
  • 举报
回复
完整的代码呢?

还有你TcpListener应该是一直在监听如while(true){...},而不是一次.

110,502

社区成员

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

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

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