当前位置: 技术问答>java相关
JAVA中的 SOCKET能否与DELPHI中的 SOCKET进行通信
来源: 互联网 发布时间:2015-08-10
本文导语: 怎样实现 | 给你些个最简单的Hello Delphi! server.java import java.net.*; import java.io.*; class Test{ public static void main(String[] args) throws IOException{ ServerSocket s=new ServerSocket(5918); Socket c=s.accept(); ...
怎样实现
|
给你些个最简单的Hello Delphi!
server.java
import java.net.*;
import java.io.*;
class Test{
public static void main(String[] args)
throws IOException{
ServerSocket s=new ServerSocket(5918);
Socket c=s.accept();
PrintWriter out=new PrintWriter(c.getOutputStream());
out.println("hello Delphi!");
out.close();
c.close();
}
}
client/Delphi
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
btnConnect: TButton;
procedure btnConnectClick(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnConnectClick(Sender: TObject);
begin
ClientSocket1.Port:=5918;
ClientSocket1.Address:='192.168.0.1';
ClientSocket1.Active:=true;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
str:string;
begin
str:=Socket.ReceiveText();
form1.caption:=str;
Socket.Close;
end;
end.
server.java
import java.net.*;
import java.io.*;
class Test{
public static void main(String[] args)
throws IOException{
ServerSocket s=new ServerSocket(5918);
Socket c=s.accept();
PrintWriter out=new PrintWriter(c.getOutputStream());
out.println("hello Delphi!");
out.close();
c.close();
}
}
client/Delphi
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
btnConnect: TButton;
procedure btnConnectClick(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.btnConnectClick(Sender: TObject);
begin
ClientSocket1.Port:=5918;
ClientSocket1.Address:='192.168.0.1';
ClientSocket1.Active:=true;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
str:string;
begin
str:=Socket.ReceiveText();
form1.caption:=str;
Socket.Close;
end;
end.
|
我实验的结果是:DELPHI SERVER-SOCKET 与 SERVLET CLIENT-SOCKET之间的通信,CLIENT先请求,然后DELPHI 响应,两者之间通信正常,但DELPHI 先发数据,则CLIENT收不到.
|
我用过vb和java没有问题 所以delphi应该也没有问题
我用的InputStream.read()来读取数据
最后单独建立一个读取的线成
然后判断还有可读取的字节 在读取
我原来用DataInputStream就老是堵塞 不知道为什么
我用的InputStream.read()来读取数据
最后单独建立一个读取的线成
然后判断还有可读取的字节 在读取
我原来用DataInputStream就老是堵塞 不知道为什么
|
大家都是标准的socket,当然可以了
实现还是一个服务器一个客户端啊,随便你哪个做服务器哪个做客户端了
实现还是一个服务器一个客户端啊,随便你哪个做服务器哪个做客户端了
|
没有问题
我试过了
不但java可以 j2me也可以
我试过了
不但java可以 j2me也可以
|
不过要注意字节的转换啊!
|
程序贴出来
|
delphi,c++不使用网络字节序,java默认就使用网络字节序
主要转换一下,ntohl,ntohs,htonl,htons,
主要转换一下,ntohl,ntohs,htonl,htons,