我有一个用C编写的简单套接字服务器:
read_fds = master;
select(fdmax+1, &read_fds, NULL, NULL, &tv);
for(i = 0; i<= fdmax; i++)
{
if (FD_ISSET(i, &read_fds))
{
if (i == listen_fd) //new connection
{
newfd = accept(listen_fd, (struct sockaddr *) NULL, NULL);
if (newfd != -1)
{
int val;
fprintf(stderr, "New connection!");
if(-1 == ioctl(newfd, FIONBIO, (val =1, &val)))
{
fprintf(stderr, "second bad meme");
}
FD_SET(newfd, &master);
if (newfd > fdmax) {
fdmax = newfd;
}
}
} else {
fprintf(stderr, "hello");
nbytes = recv(i, buf, sizeof buf, 0);
if(nbytes <= 0)
{
fprintf(stderr, "Dead");
close(i);
FD_CLR(i, &master);
} else {
fprintf(stderr, "%s", buf);
}
}
}
}
我使用flash连接到它(我在flash中运行它,所以此时策略不应成为问题):
Security.allowInsecureDomain("*");
Security.allowDomain("*");
var socket = new XMLSocket;
socket.connect("12.34.56.78", 8080);
socket.onConnect = function(success) {
if(success) {
trace("connected");
var result = socket.writeUTF("sent from client\n");
}
}
当我启动服务器,然后启动Flash文件时,我看到&#34;新连接!&#34;在服务器上,闪存还报告它已连接。
我希望看到&#34;你好&#34;来自服务器(我的C代码中的fprintf),然后是&#34;从客户端&#34;发出。然而,没有任何事情发生。
如果我关闭flash文件,我做看&#34;你好&#34;其次是&#34; Dead&#34;。所以看起来`socket.writeUTF()不起作用,或者我只是不能正确理解如何使用flash写入套接字。
我安装了数据包监视器,我可以看到闪存正在尝试向服务器的IP发送内容,但我不知道它为什么不起作用。
无论哪种方式,似乎问题都在客户端方面。我做错了什么,我该如何解决?