当前位置: 首页 > 工具软件 > Tcl Java > 使用案例 >

java 嵌入 tcl_Java和TCL之间的套接字编程

郑光济
2023-12-01

我必须为一个场景编写一个程序,在该场景中,java程序将使用套接字编程与TCL程序进行通信.

我已经成功地尝试了TCL和

Java的套接字编程.但由于我必须将Java程序作为客户端套接字并将TCL程序作为服务器,因此我无法成功完成.

服务器的TCL程序

set svcPort 9999

#Implement the service

# This example just writes the info back to the client...

proc doService {sock msg} {

puts $sock "$msg"

}

# Handles the input from the client and client shutdown

proc svcHandler {sock} {

set l [gets $sock] ;# get the client packet

puts "The packet from the client is $l"

if {[eof $sock]} { ;# client gone or finished

close $sock ;# release the servers client channel

} else {

doService $sock $l

}

}

# Accept-Connection handler for Server.

# called When client makes a connection to the server

# Its passed the channel we're to communicate with the client on,# The address of the client and the port we're using

#

# Setup a handler for (incoming) communication on

# the client channel - send connection Reply and log connection

proc accept {sock addr port} {

# if {[badConnect $addr]} {

# close $sock

# return

# }

# Setup handler for future communication on client socket

fileevent $sock readable [list svcHandler $sock]

# Read client input in lines,disable blocking I/O

fconfigure $sock -buffering line -blocking 0

# Send Acceptance string to client

puts $sock "$addr:$port,You are connected to the echo server."

puts $sock "It is now [exec date]"

# log the connection

puts "Accepted connection from $addr at [exec date]"

}

# Create a server socket on port $svcPort.

# Call proc accept when a client attempts a connection.

socket -server accept $svcPort

vwait events ;# handle events till variable events is set

Java客户端程序

// File Name GreetingClient.java

import java.net.*;

import java.io.*;

public class GreetingClient

{

public static void main(String [] args)

{

String serverName = args[0];

int port = Integer.parseInt(args[1]);

try

{

System.out.println("Connecting to " + serverName

+ " on port " + port);

Socket client = new Socket(serverName,port);

System.out.println("Just connected to "

+ client.getRemoteSocketAddress());

OutputStream outToServer = client.getOutputStream();

DataOutputStream out =

new DataOutputStream(outToServer);

out.writeUTF("Hello from "

+ client.getLocalSocketAddress()+"\n");

InputStream inFromServer = client.getInputStream();

DataInputStream in =

new DataInputStream(inFromServer);

System.out.println("Server says " + in.readUTF());

client.close();

}catch(IOException e)

{

e.printStackTrace();

}

}

}

>我启动了服务器,服务器什么也没显示.

>我启动了客户端,服务器显示“从2013年5月6日星期一02:50:21 PDT 2013开始接受连接”,客户端显示

“连接到端口9999

刚连接到/(服务器IP地址):9999“

>当out.writeUTF在客户端执行时,服务器显示“来自客户端的数据包是”Hello来自:/< client ip address>:< client port no>“.但是客户端没有显示任何内容,因为它应该是显示来自服务器的回复.客户端进程没有退出并等待System.out.println的执行(“服务器说”in.readUTF());.

有人可以在这里帮忙,并说明为什么客户端在连接时无法看到服务器的回复,客户端可以将数据发送到服务器.

谢谢

 类似资料: