问题是这样子的
我在form1中定义了一个sk1:tsocket
然后在form2中
用sk1 发送东西 发完后 socket 自动关闭了~
但是在form1中发东西 如果我不运行 closesocket 的话 是不会断掉的
问下 这是怎么回事另我在 form2 里加了个
uses Unit1;
直接调用 sk1~
这样子应该没问题吧~
我在form1中定义了一个sk1:tsocket
然后在form2中
用sk1 发送东西 发完后 socket 自动关闭了~
但是在form1中发东西 如果我不运行 closesocket 的话 是不会断掉的
问下 这是怎么回事另我在 form2 里加了个
uses Unit1;
直接调用 sk1~
这样子应该没问题吧~
解决方案 »
- 分数不多,求个监测IE动作的思路!请好心人帮助,谢谢!
- 谁能把 这段 C 代码改成 delphi 的,非常感激
- 终于5个小内了,庆祝下,放分.顺便CSDNExplorer的作者进来下,发先个大bug.
- 类似saynsay的多人视频,顶者有分啦
- 超难问题!!!!! 如何实现 jpeg2000 的压缩 和显示 ????????????
- 使用Rave打印报表时,如果在运行时选择打印机?
- 关于IdTCPServer
- midas回调问题!急.....急!
- dickeybird888请进。
- 请高手帮忙!有没有能够自动识别HTML代码的RichEdit呢?
- 急求基于delphi的从excel导入SQL数据库的编程应用的实际代码 最好详细点
- 有人熟悉SIM508模块和AT指令的 救命啊!!!
test_array=array[0..211] of Byte;
var
re:integer;
message_headpack:array[0..3] of Byte;
test_byte:array[0..207] of Byte;
send_pack:test_array;
psend_pack:^test_array;
~~~~~~~~~~~~~~~~~~~~
前边是些赋值语句就不复制了
for i:=0 to sizeof(message_headpack)-1 do
send_pack[i]:=message_headpack[i];
for i:=SizeOf(message_headpack)to SizeOf(send_pack)-1 do
send_pack[i]:=test_byte[i-sizeof(message_headpack)];
re:=send(sk1,psend_pack^,Length(psend_pack^),0);
//单步运行到这一步 就发现信息包发出去后 然后socket也自动关闭了~sk1是套接字~我在unit1中定义的
if(Re=SOCKET_ERROR)then
begin
ShowMessage('发送错误');
exit;
end;
form2.Release;
close;高手帮我看下
Winsock2;try
re:=send(sk1,psend_pack^,Length(psend_pack^),0);
finally
ShowMessage(SysErrorMessage(WSAGetLastError()));
end;
你在UNIT2单位里使用SEND发送前,是否连接成功的?
连接是成功的~输出信息加了没有任何提示
我在unit2中 把东西发送出去后 服务器也接收到了然后socket自动断开了~
大致代码如下
unit Unit1;interface
uses
WinSock;
var
sk1:tsocket;
.......
procedure TForm1.FormCreate(Sender: TObject); //在form1中创建的socket
var
wsadata:TWSAData;
addr:TSockAddr;
begin
if (wsastartup(makeword(2,0),wsadata)<>0) then
begin
showmessage('winsock初始化失败');
exit;
end;
sk1:=socket(af_inet,sock_stream,ipproto_tcp);
if (skt=INVALID_SOCKET)then
begin
showmessage('创建socket失败');
exit;
end;
ZeroMemory(@addr,sizeof(addr));
addr.sin_family:=af_inet;
addr.sin_port:=htons(32734);
addr.sin_addr.S_addr:=inet_addr('192.168.0.22');
i:=connect(sk1,addr,sizeof(addr));
if i<>0 then
begin
ShowMessage('连接失败');
exit;
end;
.........unit Unit2;
.
implementationuses Unit1;procedure TForm3.sendbtnClick(Sender: TObject);
type
test_array=array[0..211] of Byte;
var
i,k,re,timeout:Integer;
radar_data:data_record; // 这是一个大结构体太长了
x_string,data_test:string;
message_headpack:array[0..3] of Byte;
test_byte:array[0..207] of Byte;
send_pack:test_array;
psend_pack:^test_array;
begin
//前边是些赋值语句,然后把结构体转成字节数组 就不复制了
//下来是发送
re:=send(sk1,psend_pack^,Length(psend_pack^),0);
//单步运行到这一步 就发现信息包发出去后 然后socket也自动关闭了~ if(Re=SOCKET_ERROR)then
begin
ShowMessage('发送错误');
exit;
end;