求!!两台机器间能够互相发送信息的程序UDP\TCP均可!!
源程序!
源程序!
解决方案 »
- 如何frame添加Onshow事件~以及如何调用frame
- 给一百分吧 ,关于串口接收数据的处理问题,返回数据时间间隔不同
- 如何得到listview多行的Caption?
- 代码有问题???请解释?????(DLL)
- 我要找工作,兄弟们帮忙顶一下下啊,多谢了!
- 用程序动态改变TTable控件字段的问题
- 怎样设置才能生成不带调试的可执行程序?
- 小弟写了一个数据库的应用程序,用的ADO驱动,用的jet OBj4.0,用的acces数据库,可是无法在一台新装的win98上运行?请帮帮我!
- 能动态创建一百个edit吗?
- maskedit能做windows里那种标准的ip地址输入框吗
- 求一个查询新邮件的代码
- 初学者:如何把4个相似的图像放在一个位图上指定给BitBtn的Glyph属性?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,WinSock, Sockets, ScktComp;type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Button3: TButton;
ServerSocket1: TServerSocket;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TThreadRead=class(TThread)
private
FK :TSocket;
fbuf : array[0..255] of char;
add : TSockAddrIn;
procedure GetInfo; public
constructor Create(sock : TSocket);
procedure Execute;override;
end;var
Form1: TForm1;
SSock : TSocket;
WSAData : TWSAData;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
ErrorCode : integer;
SockAdd_In : TSockAddrIn;
begin
//´´½¨Ò»¸öÌ×½Ó×Ö
SSock := socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if SSock = SOCKET_ERROR then
begin
showmessage(Format('%s;ErrorCode:%d',['½¨Á¢Ì×½Ó×Öʧ°Ü',WSAGetLastError]) );
Exit;
end; SockAdd_In.sin_family := PF_INET;
SockAdd_In.sin_port := htons(5150);
SockAdd_In.sin_addr.S_addr := htonl(INADDR_ANY); ErrorCode := bind(SSock,SockAdd_In,sizeof(SockAdd_In));
if ErrorCode = SOCKET_ERROR then
begin
showmessage(Format('%s;ErrorCode:%d',['°ó¶¨Ì×½Ó×Öʧ°Ü',WSAGetLastError]) );
Exit;
end;
TThreadRead.Create(SSock); // FAcceptSockThread := TAcceptSockThread.Create(FSock);
end;{ TThreadRead }constructor TThreadRead.Create(sock: TSocket);
begin
FK := sock;
inherited Create(false);
end;procedure TThreadRead.Execute;
var
tm : integer;
begin
while not terminated do
begin
tm := sizeof(add);
if recvfrom(FK,fbuf,256,0,add,tm) > 0 then
begin
Synchronize(GetInfo);
Sleep(0);
end; end;
end;procedure TThreadRead.GetInfo;
var
s : string;
begin
s := fbuf;
s := s+#13 + inet_ntoa(add.sin_addr);
Form1.Memo1.Lines.Add(s);
end;procedure StartUp;
var
ErrorCode : integer;
begin
ErrorCode := WSAStartup($0101, WSAData);
if ErrorCode <> 0 then
begin
ShowMessage('¼ÓÔØʧ°Ü');
exit;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
var
ErrorCode : integer;
buf : array[0..255] of Char;
SockAddTo : TSockAddrIn;
SkC : TSocket;
begin skc := socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if skc = SOCKET_ERROR then
begin
showmessage('½¨Á¢Ì×½Ó×Öʧ°Ü');
Exit;
end; SockAddTo.sin_family := PF_INET;
SockAddTo.sin_port := htons(5150);
SockAddTo.sin_addr.S_addr := inet_addr('192.168.1.3'); buf :='wudi_1982';
sendto(SkC,buf,256*sizeof(char),0,SockAddTo,sizeof(SockAddTo));// shutdown(skc,SD_SEND);
closesocket(skc);end;procedure TForm1.Button3Click(Sender: TObject);
function LookupName(const Name: string): TInAddr;
var
HostEnt: PHostEnt;
InAddr: TInAddr;
begin
HostEnt := gethostbyname(PChar(Name));
FillChar(InAddr, SizeOf(InAddr), 0);
if HostEnt <> nil then
begin
with InAddr, HostEnt^ do
begin
S_un_b.s_b1 := h_addr^[0];
S_un_b.s_b2 := h_addr^[1];
S_un_b.s_b3 := h_addr^[2];
S_un_b.s_b4 := h_addr^[3];
end;
end;
Result := InAddr;
end;
var
p : pchar;
l : DWORD;
ht : TInAddr;
WSAData1 : TWSAData;
begin
l := MAX_COMPUTERNAME_LENGTH + 1;
p :=AllocMem(l);
WSAStartup($0101,WSAData1);
GetComputerName(p,l);
ht :=LookupName(p);
ShowMessage(inet_ntoa(ht));
FreeMem(p);
WSACleanup;
end;initialization
StartUp;
finalization
WSACleanup;end.