delphi7的socket编程。我没有使用tcpserver控件,而是自动生成socket的。
程序在下面啊。先建立socket 然后绑定bind 然后监听lisent 然后接受accept 然后接收recv。但程序中recv每次都返回-1,不能接收到数据。
调了2天,我是真的没办法了,各位朋友帮帮忙啊!帮我看看哪里错了
不甚感激
//1.置中断为假
Global_QuitReq := false;
//2.初始化客户端结构
fillchar(server_addr, sizeof(server_addr), 0);
//2.1 端口
server_addr.sin_family := AF_INET;
server_addr.sin_port := htons(GlobalListenPort);
//2.2 主机IP
server_addr.sin_addr.S_addr := inet_addr(Pchar(GlobalServerIP));
if server_addr.sin_addr.S_addr = INADDR_NONE then
begin
ShowMessage('初始化出错,绑定IP地址非法!');
exit;
end;
//3.创建SOCK
Global_Sock_Accept := socket(AF_INET, SOCK_STREAM, 0);
if (Global_Sock_Accept = SOCKET_ERROR) then
begin
ShowMessage('初始化出错,无法创建SOCK!');
exit;
end;
//4.绑定
if (bind(Global_Sock_Accept, server_addr, sizeof(server_addr)) <> 0) then
begin
showmessage('初始化出错,无法绑定!');
exit;
end;
//5.监听
if (listen(Global_Sock_Accept, 5) <> 0) then
begin
showmessage('初始化出错,无法监听!');
exit;
end;
//6.设置
// PostMessage(FMainForm.Handle, CM_SETAppearance, 0, 0);
//7.循环等待请求
while (not Global_QuitReq) do
begin
i := sizeof(client_addr);
fillchar(client_addr, i, 0);
ns := accept(Global_Sock_Accept, addr(client_addr), addr(i));
if ns=-1 then
begin
test:='socket error';
exit;
end;
fillchar(rbuf, sizeof(rbuf), #0);
recvlen:=recv(Global_Sock_Accept,rbuf,sizeof(rbuf),0) ;
if recvlen>0 then //出错。每次都返回-1,没有接收到数据
begin
test:='socket error';
exit;
end;
end;
end;
程序在下面啊。先建立socket 然后绑定bind 然后监听lisent 然后接受accept 然后接收recv。但程序中recv每次都返回-1,不能接收到数据。
调了2天,我是真的没办法了,各位朋友帮帮忙啊!帮我看看哪里错了
不甚感激
//1.置中断为假
Global_QuitReq := false;
//2.初始化客户端结构
fillchar(server_addr, sizeof(server_addr), 0);
//2.1 端口
server_addr.sin_family := AF_INET;
server_addr.sin_port := htons(GlobalListenPort);
//2.2 主机IP
server_addr.sin_addr.S_addr := inet_addr(Pchar(GlobalServerIP));
if server_addr.sin_addr.S_addr = INADDR_NONE then
begin
ShowMessage('初始化出错,绑定IP地址非法!');
exit;
end;
//3.创建SOCK
Global_Sock_Accept := socket(AF_INET, SOCK_STREAM, 0);
if (Global_Sock_Accept = SOCKET_ERROR) then
begin
ShowMessage('初始化出错,无法创建SOCK!');
exit;
end;
//4.绑定
if (bind(Global_Sock_Accept, server_addr, sizeof(server_addr)) <> 0) then
begin
showmessage('初始化出错,无法绑定!');
exit;
end;
//5.监听
if (listen(Global_Sock_Accept, 5) <> 0) then
begin
showmessage('初始化出错,无法监听!');
exit;
end;
//6.设置
// PostMessage(FMainForm.Handle, CM_SETAppearance, 0, 0);
//7.循环等待请求
while (not Global_QuitReq) do
begin
i := sizeof(client_addr);
fillchar(client_addr, i, 0);
ns := accept(Global_Sock_Accept, addr(client_addr), addr(i));
if ns=-1 then
begin
test:='socket error';
exit;
end;
fillchar(rbuf, sizeof(rbuf), #0);
recvlen:=recv(Global_Sock_Accept,rbuf,sizeof(rbuf),0) ;
if recvlen>0 then //出错。每次都返回-1,没有接收到数据
begin
test:='socket error';
exit;
end;
end;
end;
当客户CONNECT上
accept在服务部创建一个连接用这个连接才可接收.
if ns=-1 then
begin
test:='socket error';
exit;
end;
fillchar(rbuf, sizeof(rbuf), #0);
recvlen:=recv(Global_Sock_Accept,rbuf,sizeof(rbuf),0) ; //这一句有错该为下面的
recvlen:=recv(ns,rbuf,sizeof(rbuf),0) ;//ns才是真正的数据接收的socket
给分吧!!!