我想将一些文本从客户端发送到服务器,但是接收器只是挂起,什么也没有通过。
客户
program client;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes , SysUtils, Windows, Winsock
{ you can add units after this };
procedure GetInformation();
var
_wsdata: WSAData;
result:Integer;
serverSocket, S: TSocket;
_addrIn, _addr: sockaddr_in;
addrSize: Integer;
tid: Cardinal;
SendBuf:Array[0..31] of AnsiChar;
data : Integer;
begin
//result := false;
if WSAStartup(MakeWord(2, 2), _wsdata) <> 0 then
Exit;
serverSocket := socket(AF_INET, SOCK_STREAM, 0);
if serverSocket = INVALID_SOCKET then
Exit;
_addrIn.sin_family := AF_INET;
_addrIn.sin_addr.S_addr := INADDR_ANY;
_addrIn.sin_port := htons(8080);
if bind(serverSocket, _addrIn, SizeOf(_addrIn)) = SOCKET_ERROR then
Exit;
if listen(serverSocket, SOMAXCONN) = SOCKET_ERROR then
Exit;
addrSize := SizeOf(_addrIn);
getsockname(serverSocket, _addrIn, addrSize);
Writeln(Format('Listening on port %d' + #13#10, [ntohs(_addrIn.sin_port)]));
while True do
begin
S := accept(serverSocket, @_addr, @addrSize);
data := recv(s,SendBuf,Length(SendBuf),0);
Writeln('Data Received: ',data);
end;
// result := True;
end;
begin
GetInformation();
ReadLn;
end.
现在应该发送数据的发送方可以正常工作,它只是接收方。看起来像这样
服务器
program server;
{$mode delphi}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes , Windows , Winsock , SysUtils
{ you can add units after this };
procedure SendFullnameTest();
var
MyData:WSADATA;
result:Integer;
s:TSocket;
SendBuf:Array[0..31] of AnsiChar;
clientservice:sockaddr_in;
BytesSent:Integer;
begin
try
result:= WSAStartup(MAKEWORD (2,2), MyData);
if result = NO_ERROR then
begin
s := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if s <> INVALID_SOCKET then
begin
clientservice.sin_family := AF_INET;
clientservice.sin_addr.s_addr := inet_addr('127.0.0.1');
clientservice.sin_port := htons(8080);
if connect(s,clientservice,sizeof(clientservice)) <> SOCKET_ERROR then
begin
sendbuf := 'I am a Sent message';
bytesSent := send(s,sendbuf,Length(sendbuf),0);
writeln('Bytes send: ',bytesSent);
end else
writeln('Failed to connect');;
end else
writeln('Error at Socket: ',WSAGetLastError);;
end else
writeln('Error at WSAStartup');
finally
Writeln(SysErrorMessage(GetLastError));
WSACleanUp;
Readln;
end;
end;
begin
SendFullnameTest();
ReadLn;
end.
令人讨厌的是它只是不显示是否发送,也不显示是否接收。
我只是将此作为终点
问题很棘手。我建议跟踪传输的字节码。然后您可以实现绕过包装器