⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tcp_chat_cli.c

📁 linux下的多个网络通讯的例子 可多参考下
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>

#include <os_defs.h>
#include <os_socket.h>
#include <os_thread.h>
#include <os_system.h>

/* 
  客户端采用select来实现多路复用,只使用一个进程来完成所有处理
  软件开销较少

  同时监控输入和socket进行处理

  
 */


static int run_flag = 1;

static void read_key_buf(void * arg)
{
	char key_buf[512];
	int len;

	OS_SOCKET socket =(OS_SOCKET)arg;
	while(1)
	{
	 if(fgets(key_buf,sizeof(key_buf),stdin) !=NULL)
	     	   	{
	     	   	    if(strcmp(key_buf,"quit") == 0)
						goto EXIT_READ;

				len = send(socket,key_buf,strlen(key_buf),0);
	     	   	    if( len== SOCKET_ERROR)
						goto EXIT_READ;
	     	   	}
	}

EXIT_READ:
    run_flag = 0;
	OS_SocketClose(socket);
}

static void read_tcp_buf(void * arg)
{
   char recv_buf[512];
   int len;
   OS_SOCKET sock=(OS_SOCKET )arg;
   while(run_flag)
   	{
   	    if((len =recv(sock,recv_buf,sizeof(recv_buf),0)) >0)
			 	{			
				    recv_buf[len] = 0;
				    printf("server:%s",recv_buf);
					if(recv_buf[len-1]!='\n')
						printf("\n");
			 	}
		else
		{
			if(run_flag != 0)
			printf("can't connect server,exit\n");
			return;
		}
   	}
}

void usage()
{
   printf("tcp_select_cli port addr \n");
}


int main(int argc ,char * argv[])
{

   int port;
   

   OS_SOCKET socket = INVALID_SOCKET;


   
   int len;
   

   OS_THREAD_T thread_id;

    if(argc<3)
   	{
          usage();
	   exit(-1);
   	}

   port = atoi(argv[1]);
   
   if((port <= 1024 ) || (port >65000))
   	{
   	   fprintf(stderr,"error port %s\n",argv[1]);
	   exit(-2);
   	}


   OS_SocketInit();
	
    if(OS_OpenTCPClient(&socket,argv[2], port)!=OS_OK)
    	{
    	   fprintf(stderr,"connect tcp file server %s:%d failure on \n",argv[2],port);
    	   exit(-3);
    	}

   OS_ThreadCreate(&thread_id,read_key_buf,socket);

   fprintf(stdout,"connect tcp file server %s:%d \n ",argv[2],port);

  
      read_tcp_buf((void *)socket);    
  	
  
EXIT_CLIENT:
  
  

   OS_Sleep(2); /* 等线程结束*/
   OS_SocketClear();

   exit(0);

}  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -