是什么地方有问题呀?
#include "chat.h"
#include <qtextcodec.h>
chat::chat(QWidget* parent, const char* name, bool modal, WFlags f1)
: ChatDialogBase( parent, name, modal, f1 )
{
USendSocket = new QSocketDevice(QSocketDevice::Datagram);
UReceiveSocket = new QSocketDevice(QSocketDevice::Datagram);
ListenOnPort(2020);
connect(MessageEdit,SIGNAL(returnPressed()),this,SLOT(OnReturnPressed()));
}
chat::~chat()
{
delete SocketNotifier;
delete UReceiveSocket;
delete USendSocket;
}
void chat::OnReturnPressed() //发送消息
{
char *DataToSend;
QString StringToSend, PortString;
QHostAddress HostAddress;
int PortNumber;
bool TestBool;
int BytesSent;
StringToSend = MessageEdit->text();
QTextCodec *codec=QTextCodec::codecForName("GBK");
QCString chinese_string=codec->fromUnicode(StringToSend);
DataToSend = (char *)malloc(chinese_string.length()+ 1);
strcpy(DataToSend,(const char *)chinese_string);
DataToSend[chinese_string.length()] = '\0';
HostAddress.setAddress(AddressEdit->text());
PortString = PortEdit->text();
PortNumber = PortString.toInt(&TestBool,10);
if(ListenPort != PortNumber)
{
UReceiveSocket->close();
ListenOnPort(PortNumber);
}
BytesSent =USendSocket->writeBlock(DataToSend,chinese_string.length
(),HostAddress,PortNumber);
printf("->%s\n",DataToSend);
free(DataToSend);
StringToSend = "->"+StringToSend;
MessageHistory->append(StringToSend);
}
void chat::OnIncommingData() //udp服务器端接收消息
{
int ByteCount,ReadCount;
char *IncommingChar;
QString IncommingString;
QHostAddress PeerAddress;
ByteCount = UReceiveSocket->bytesAvailable();
IncommingChar = (char *)malloc(ByteCount+1);
ReadCount = UReceiveSocket->readBlock(IncommingChar,ByteCount*2);
IncommingChar[ReadCount] = '\0';
IncommingString = "<-";
IncommingString += IncommingChar;
QTextCodec* codec = QTextCodec::codecForName("GBK");
QString gbk_string = codec->toUnicode(IncommingString);
MessageHistory->append(gbk_string);
printf("<-%s\n",IncommingChar);
free(IncommingChar);
PeerAddress = UReceiveSocket->peerAddress();
AddressEdit->setText(PeerAddress.toString());
}
void chat::ListenOnPort(int Port)
{
QHostAddress MyAddress;
QString FakeAddress;
ListenPort = Port;
FakeAddress = "127.0.0.1";
MyAddress.setAddress(FakeAddress);
UReceiveSocket->bind(MyAddress,ListenPort);
SocketNotifier = new QSocketNotifier(UReceiveSocket->socket
(),QSocketNotifier::Read,0,"SocketNotifier");
connect(SocketNotifier,SIGNAL(activated(int)),SLOT(OnIncommingData()));