请看我写的一个服务器和客户端通过TCP传递文字的例子,问题在哪里?情大家帮忙,我已经弄了一晚上了。
都是在DELPHI 7控制台程序下编写的。就是客户端根本收不到服务器端的消息。
真是头疼,请大家帮忙,不然可能就学习部下去了。我已经弄了一晚上了
首先是服务器端的代码:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
WinSock,
windows;
Var
s,cs :TSocket;
w :WsaData;
version :Word;
sin,rsin :sockaddr_in;
n :integer;
b :pchar;
begin
version :=makeword(2,2);
WSAStartUp(Version,w);
sin.sin_family :=af_inet;
sin.sin_port :=htons(4567);
sin.sin_addr.S_addr :=inaddr_any;
socket(s,sock_stream,0);
bind(s,sin,SizeOf(sin));
listen(s,2);
n :=SizeOf(rsin);
getmem(b,5);
b :='12345';
while true do
begin
cs :=accept(s,@rsin,@n);
if cs=invalid_socket then
continue
else
begin
if send(cs,b,strlen(b),0)=SOCKET_ERROR then
Writeln('send error');
closesocket(cs);
break;
end;
end;
closesocket(s);
readln;
end.
然后是客户端的代码:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, winsock,windows;
var
s :TSocket;
w :WsaData;
version :Word;
sin :sockaddr_in;
b :pchar;
begin
{ TODO -oUser -cConsole Main : Insert code here }
version :=makeword(2,2);
{ TODO -oUser -cConsole Main : Insert code here }
WSAStartUp(Version,w);
socket(s,sock_stream,0);
sin.sin_family :=af_inet;
sin.sin_port :=htons(4567);
sin.sin_addr.S_addr :=inet_addr('127.0.0.1');
connect(s,sin,Sizeof(sin));
getmem(b,5);
b :='00000';
recv(s,b,strlen(b),0);
writeln(b);
closesocket(s);
readln;
end.