• 4399阅读
  • 1回复

哪位大侠告诉我是怎么回事:在界面输入信息后老提示“已丢弃” [复制链接]

上一主题 下一主题
离线wangyue5826
 

只看楼主 倒序阅读 楼主  发表于: 2008-05-24
哪位大侠告诉我是怎么回事:在界面输入信息后老提示“已丢弃”
— 本帖被 XChinux 执行加亮操作(2008-05-24) —
是什么地方有问题呀?
#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()));
离线taomic

只看该作者 1楼 发表于: 2008-05-29
这应该是烦人的段错误
具体只能用gdb调试来找了
快速回复
限100 字节
 
上一个 下一个