- 論壇徽章:
- 0
|
背景:主要是為了POS的接入提供服務(wù),POS機(jī)通過海博通的網(wǎng)控器接入。
我要實(shí)現(xiàn)的功能:就是建立一個雙工異步長連接的服務(wù)器端,與海波通的網(wǎng)控器實(shí)現(xiàn)長連接。
功能設(shè)計:1,創(chuàng)建一個服務(wù)器監(jiān)聽,用以接收客戶端的連接(mian函數(shù)所做的操作)
2,收到客戶端的連接請求后創(chuàng)建一個字進(jìn)程用于建立跟這個客戶端的連接
3,在字進(jìn)程里創(chuàng)建一個接收線程和一個發(fā)送線程用以處理接收信息和發(fā)送信息
我主要是想,如果在創(chuàng)建的字進(jìn)程里,做發(fā)送或者接收超時設(shè)置,如果超時,就直接exit,退出字進(jìn)程。不知道這樣是否存在問題。因?yàn)閮蓚線程的資源可能都沒有回收,而直接退出進(jìn)程。
int main()
{
InitSocket(ip, port);//監(jiān)聽
while(1){
clisock=accept(svrsock,0,0);
if(fork = 0){
ConnFun();//如果收到一個監(jiān)聽,就創(chuàng)建一個字進(jìn)程用于建立長連接。
}
}
}
//創(chuàng)建兩個線程一個用于接收消息,一個用于發(fā)送消息
void ConnFun()
{
pthread_t tid[2];
void *pth_join_ret1;
void *pth_join_ret2;
int ret;
//創(chuàng)建接收網(wǎng)控器消息的線程
ret = pthread_create(&tid[0], NULL, doWorker1, NULL);
if(ret != 0){
close(clisock);
exit(-1);
}
//創(chuàng)建發(fā)送網(wǎng)控器消息的線程
ret = pthread_create(&tid[1], NULL, doWorker2, NULL);
if(ret != 0){
close(clisock);
exit(-1);
}
ret = pthread_join(tid[0], &pth_join_ret1);
ret = pthread_join(tid[1], &pth_join_ret2);
} |
|