淘先锋技术网

首页 1 2 3 4 5 6 7

Socket 字符串是网络编程中非常重要的一个概念,它可以用来实现服务器与客户端之间的通讯。在 Java 和 C 中,socket 字符串都有着较为明显的差异。

java和c的socket字符串

在 Java 中,通常使用的是基于 TCP 协议实现的 Socket 字符串。Java 提供了 socket 包来实现 Socket 字符串的相关操作。下面是一个基本的 Java Socket 字符串示例:


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("正在连接服务器 " + serverName + ",端口号为 " + port);
            Socket client = new Socket(serverName, port);
            System.out.println("已连接服务器,远程主机地址为 " + client.getRemoteSocketAddress());
            OutputStream outToServer = client.getOutputStream();
            DataOutputStream out = new DataOutputStream(outToServer);

            out.writeUTF("客户端发送的数据 " + client.getLocalSocketAddress());

            InputStream inFromServer = client.getInputStream();
            DataInputStream in = new DataInputStream(inFromServer);

            System.out.println("服务器返回的数据 " + in.readUTF());
            client.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

在 C 中,通常使用的是基于 BSD socket 库实现的 Socket 字符串。C 中的 Socket 字符串操作较为底层,需要自行实现 Socket 字符串的相关函数。下面是一个基本的 C Socket 字符串示例:


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc, char *argv[]) {
    int sockfd, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    if (argc < 3) {
        fprintf(stderr, "使用方法:%s hostname port\n", argv[0]);
        exit(0);
    }
    int portno = atoi(argv[2]);
    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,找不到主机\n");
        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);
    if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) {
        perror("ERROR,连接失败");
        exit(1);
    }

    printf("请输入发送到服务器的数据: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
    n = write(sockfd, buffer, strlen(buffer));

    if (n < 0) {
        perror("ERROR,写入失败");
        exit(1);
    }

    bzero(buffer,256);
    n = read(sockfd, buffer, 255);

    if (n < 0) {
        perror("ERROR,读取失败");
        exit(1);
    }

    printf("来自服务器的数据: %s", buffer);
    close(sockfd);
    return 0;
}

以上是 Java 和 C 中基本的 Socket 字符串示例,希望能帮助读者了解 Socket 字符串的操作方式。