?? tcp_chat_cli.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 + -