简单的客户端,服务端通信

client.c代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#define BUFLEN 10
int main(int argc, char **argv)
{
    int sockfd;
    int port = 4567;
    struct sockaddr_in ser_addr;
    int len;
    char buf[BUFLEN];
     /*建立socket*/
    if ((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){
        printf("server socket creation error\n");
        return -1;
    }else 
    printf("server socket success\n"); 

    ser_addr.sin_port = htons(port);
    ser_addr.sin_family = AF_INET;
    if (inet_aton(argv[1], (struct in_addr *)&ser_addr.sin_addr.s_addr) == 0) {
       printf("server  error\n");
        return -1;
        }
     
     /*开始连接服务器*/    
    if(connect(sockfd,(struct sockaddr*)&ser_addr,sizeof(struct sockaddr)) == -1){
        perror("connect");
        exit(errno);
    }else
        printf("conncet success!\n");
     while(1)
{
        /******接收消息*******/
        bzero(buf,BUFLEN);
    len = recv(sockfd,buf,BUFLEN,0);
    if(len > 0)
      printf("服务器发来的消息是:%s,共有字节数是: %d\n",buf,len-1);
     else
       printf("接受消息失败!\n");
    
    /******发送消息*******/ 
        bzero(buf,BUFLEN);
    printf("请输入发送给对方的消息:");
      /*fgets函数:从流中读取BUFLEN-1个字符*/
        fgets(buf,BUFLEN,stdin);
        len = send(sockfd,buf,strlen(buf),0);
        if(len > 0)
            printf("消息发送成功,本次共发送的字节数是:%d\n",len);            
        else{
             printf("聊天终止!\n");
                break;  
 }      
    }
    /*关闭连接*/
    close(sockfd);
    return 0;
}            
  
View Code

server.c代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <unistd.h>
#define BUFLEN 10
int main(int argc,char **argv)
{
int ser_sockfd,cli_sockfd;
int port = 4567;
int len;   //
struct sockaddr_in ser_addr;
struct sockaddr_in cli_addr;
char buf[BUFLEN];
 /*建立socket*/
if ((ser_sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1){
    printf("server socket creation error\n");
        return -1;
}else
printf("socket create success!\n");
 /*设置服务器ip*/
bzero(&ser_addr,sizeof(ser_addr));
ser_addr.sin_family = AF_INET;
 /*设置服务器端口*/
ser_addr.sin_port=htons(port);
if (argv[1])
        ser_addr.sin_addr.s_addr = inet_addr(argv[1]);
    else
        ser_addr.sin_addr.s_addr = INADDR_ANY;


/*把地址和端口帮定到套接字上*/
if (bind(ser_sockfd,(struct sockaddr*) &ser_addr,sizeof(struct sockaddr_in)) == -1){
 printf("server binding error\n");
        return -1;
}else
        printf("bind success!\n");

/*侦听本地端口*/
if (listen(ser_sockfd,5) == -1){
 printf("server listening error\n");
        return -1;
}else
        printf("the server is listening!\n");

  while(1){
        printf("*****************聊天开始***************\n");
if ((cli_sockfd = accept(ser_sockfd,(struct sockaddr*)&cli_addr,&len)) == -1){
printf("server acception error\n");
        return -1;
}else
  printf("正在与您聊天的客户端是:%s: %d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port));

while(1){
 /******发送消息*******/
            bzero(buf,BUFLEN);
 /*fgets函数:从流中读取BUFLEN-1个字符*/
            fgets(buf,BUFLEN,stdin);
             len = send(cli_sockfd,buf,strlen(buf),0);
            if(len > 0)
                printf("消息发送成功,本次共发送的字节数是:%d\n",len);            
            else{
                printf("消息发送失败!\n");
                break;            
            }
            /******接收消息*******/
            bzero(buf,BUFLEN);
            len = recv(cli_sockfd,buf,BUFLEN,0);
            if(len > 0)
                printf("客户端发来的信息是:%s,共有字节数是: %d\n",buf,len);
            else{
                    printf("聊天终止!\n");
                break;        
            }
        }
        /*关闭聊天的套接字*/
        close(cli_sockfd);
       
    }
    /*关闭服务器的套接字*/
    close(ser_sockfd);
    return 0;
}
View Code

 

以下是Java编写的局域网实时通信客户端服务端通信方法: 客户端: 1. 导入Socket和IO相关的包 ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; ``` 2. 创建Socket对象,指定服务器地址和端口号 ```java Socket socket = new Socket("localhost",9999); ``` 3. 获取输入输出流,进行数据传输 ```java BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); ``` 4. 发送数据 ```java out.println("Hello Server"); ``` 5. 接收数据 ```java String response = in.readLine(); System.out.println("Server response: " + response); ``` 6. 关闭连接 ```java in.close(); out.close(); socket.close(); ``` 服务端: 1. 导入Socket和IO相关的包 ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; ``` 2. 创建ServerSocket对象,指定端口号 ```java ServerSocket serverSocket = new ServerSocket(9999); ``` 3. 监听客户端连接,获取Socket对象 ```java Socket socket = serverSocket.accept(); ``` 4. 获取输入输出流,进行数据传输 ```java BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); ``` 5. 接收数据 ```java String request = in.readLine(); System.out.println("Client request: " + request); ``` 6. 发送数据 ```java out.println("Hello Client"); ``` 7. 关闭连接 ```java in.close(); out.close(); socket.close(); serverSocket.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值