从c++发送TCP数据并接收到Java套接字

sending tcp data from c++ and receive to java socket

本文关键字:Java 套接字 c++ 发送 TCP 数据      更新时间:2023-10-16

我正在使用visual c++创建一个应用程序,它将使用tcp与java服务器通信。

所以你想要的只是在java中使用套接字创建服务器,该套接字将侦听使用c++套接字创建的客户端,并给出将在服务器上运行的服务器地址和端口.

c++客户端示例

#include <stdio.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>
int main(int argc, char *argv[])
{
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
char buffer[256];
if (argc < 3) {
    fprintf(stderr,"usage %s hostname portn", argv[0]);
    exit(0);
}
portno = atoi(argv[2]);
/* Create a socket point */
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) 
{
    perror("ERROR opening socket");
    exit(1);
}
server = gethostbyname(argv[1]);
if (server == NULL) {
    fprintf(stderr,"ERROR, no such hostn");
    exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr, 
       (char *)&serv_addr.sin_addr.s_addr,
            server->h_length);
serv_addr.sin_port = htons(portno);
/* Now connect to the server */
if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) 
{
     perror("ERROR connecting");
     exit(1);
}   
/* Now ask for a message from the user, this message
* will be read by server
*/
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
/* Send message to the server */
n = write(sockfd,buffer,strlen(buffer));
if (n < 0) 
{
     perror("ERROR writing to socket");
     exit(1);
}
/* Now read server response */
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0) 
{
     perror("ERROR reading from socket");
     exit(1);
}
printf("%sn",buffer);
return 0;
}

java服务器示例

// File Name GreetingServer.java
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread
{
private ServerSocket serverSocket;
public GreetingServer(int port) throws IOException
{
  serverSocket = new ServerSocket(port);
  serverSocket.setSoTimeout(10000);
}
public void run()
{
  while(true)
  {
     try
     {
        System.out.println("Waiting for client on port " +
        serverSocket.getLocalPort() + "...");
        Socket server = serverSocket.accept();
        System.out.println("Just connected to "
              + server.getRemoteSocketAddress());
        DataInputStream in =
              new DataInputStream(server.getInputStream());
        System.out.println(in.readUTF());
        DataOutputStream out =
             new DataOutputStream(server.getOutputStream());
        out.writeUTF("Thank you for connecting to "
          + server.getLocalSocketAddress() + "nGoodbye!");
        server.close();
     }catch(SocketTimeoutException s)
     {
        System.out.println("Socket timed out!");
        break;
     }catch(IOException e)
     {
        e.printStackTrace();
        break;
     }
  }
}
public static void main(String [] args)
{
  int port = Integer.parseInt(args[0]);
  try
  {
     Thread t = new GreetingServer(port);
     t.start();
  }catch(IOException e)
  {
     e.printStackTrace();
  }
 }
}