我是c ++和socket编程的新手。我设法在unix机器中使用c ++创建服务器,并将该服务器连接到在不同的Windows机器上运行的java客户端。我还设法成功地从客户端向服务器发送消息。我还没有管理的是从服务器向客户端发送消息。我想这是我是c ++的新手,但我没有在互联网上找到非常有用的东西。我只发现c ++客户端到服务器通信代码而不是服务器到客户端。有人可以提供一些指导吗?
Thnx提前为你的时间和你的帮助......
C ++服务器代码
int main( int argc, const char** argv )
{
/* SOCKET VARIABLES */
int sock;
struct sockaddr_in server;
int mysock;
char buff[1024];
int rval;
/*CREATE SOCKET*/
sock =socket(AF_INET, SOCK_STREAM, 0);
if (sock<0)
{
perror("*FAILED TO CREATE SOCKET*");
exit(1);
}
server.sin_family=AF_INET;
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(5000);
/*CALL BIND*/
if (bind(sock, (struct sockaddr *)&server, sizeof(server)))
{
perror("BIND FAILED");
exit(1);
}
/*LISTEN*/
listen(sock, 5);
/*ACCEPT*/
do{
mysock= accept(sock, (struct sockaddr *) 0, 0);
if (mysock==-1)
{
perror ("ACCEPT FAILED");
}
else
{
memset(buff, 0, sizeof(buff));
if ((rval=recv(mysock, buff, sizeof(buff), 0)) < 0)
perror("READING STREAM MESSAGE ERROR");
else if(rval==0)
printf("Ending connection");
else
printf("MSG: %s\n", buff);
printf("GOT THE MESSAGE (rval = %d)\n", rval);
}
}while (1) ;
return 0;
Java客户端代码
public class SOK_1_CLIENT {
public void run() throws Exception
{
String adrress="172.16.151.237"; //localhost -- samemachine
Socket SOCK =new Socket (adrress,5000);
PrintStream PS =new PrintStream(SOCK.getOutputStream());
PS.println("HELLO TO SERVER FROM CLIENT");
InputStreamReader IR =new InputStreamReader(SOCK.getInputStream());
BufferedReader BR = new BufferedReader(IR);
String MESSAGE =BR.readLine();
System.out.println(MESSAGE + "java");
}
}
答案 0 :(得分:1)
在C套接字中是双向通信文件描述符。您可以使用send(2)
向他们写信。检查man 2 send
。
char * buffer;
size_t length, sent;
while (length && (sent = send(mysock, buffer, length, 0)) > 0) {
length -= send;
}
if (sent < 0)
perror("send");
请注意,与C BufferedWriter
中的java send
不同,不能保证一次性发送整个缓冲区。因此while循环。如果您想要缓冲套接字IO,那么您可以使用fdopen
创建stdio
流,但如果您希望能够传递标记并拦截套接字错误,则不建议这样做。
答案 1 :(得分:1)
好的,我发现你已经设法在C ++服务器上收到消息并从java客户端发送。请参阅java中的“从socket接收”和C ++中的“从socket发送”。在上面的代码中使用它们并记住服务器发送的时间,此时java客户端应该期待来自服务器的数据。这将解决您的问题。
如果您想使服务器客户端像聊天应用程序一样,您有两种可能:
根据您的要求和使用的语言强调关键字。
答案 2 :(得分:0)