線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:973
推到 Plurk!
推到 Facebook!

寫一支可以同時接收與發送資料的程式

尚未結案
Fone
一般會員


發表:4
回覆:2
積分:1
註冊:2004-07-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-14 20:27:30 IP:218.165.xxx.xxx 未訂閱
想請教一下..要如何利用multithread的方式..設計一支可以同時接收與發送資料的程式..?!    要如何將下面的程式..整合成用multithread的方法來達到..可以同時接收與發送資料的程式..?!煩請大家了..不才的小弟我想了好久..><..    若是有其他的方法..可否也教導一下不才的小弟我..^^..    /* tcp.h  * Definitions for TCP client/server programs.  */ #include         #include #include #include #include #define SERV_UDP_PORT 6001 #define SERV_TCP_PORT 6001 #define SERV_HOST_ADDR "140.118.21.106" #define MAXLINE 512 char *pname; ------------------------------------------------------ /* tcpserv.c * Example of server using TCP protocol. */ #include #include #include #include #include #include "tcp.h" void tcp_server(); main(argc, argv) int argc; char *argv[]; { int sockfd, newsockfd, clilen, childpid; int status; struct sockaddr_in cli_addr, serv_addr; pname = argv[0]; /* Open a TCP socket (an Internet stream socket)*/ if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ perror("server: can't open stream socket"); exit(); } /* Bind local address so that the client can send to us */ memset((char *) &serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(INADDR_ANY); serv_addr.sin_port = htons(SERV_TCP_PORT); if (bind(sockfd,(struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){ perror("server: can't bind local address"); exit(); } listen(sockfd, 5); clilen = sizeof(cli_addr); for ( ; ; ) { /* * Wait for a connection from a client process. * This is an example of a concurrent server. */ newsockfd=accept(sockfd,(struct sockaddr *) &cli_addr,&clilen); if (newsockfd < 0){ perror("server: accept error"); continue; } if ( (childpid = fork()) < 0){ perror("server: fork error"); } else if (childpid == 0) { /* child process */ close(sockfd); /* close original socket */ switch(fork()){ case 0: /* grandchild */ tcp_server(newsockfd,cli_addr); close(newsockfd); exit(0); case -1: /* fork error */ close(newsockfd); _exit(); default: close(newsockfd); exit(0); /* child exit */ } }else { /* parent process */ wait(&status); } } } void tcp_server(sockfd,cli_addr) int sockfd; struct sockaddr_in cli_addr; { int n; char mesg[MAXLINE 1]; char recvbuf[MAXLINE 1]; /* sleep is used to test retransmission, * uncomment when needed */ /* sleep(5); */ n=recv(sockfd,recvbuf,MAXLINE,0); recvbuf[n]=0; sprintf(mesg,"Your message : %s has been received\n", recvbuf); write(sockfd,mesg,strlen(mesg)); close(sockfd); sprintf(mesg,"Message: %s received from %s\n",recvbuf, inet_ntoa(cli_addr.sin_addr) ); write(2,mesg,strlen(mesg)); } ------------------------------------------------------- /* tcpcli.c * Example of client using TCP protocol. */ #include #include #include #include "tcp.h" void tcp_client(); main(argc, argv) int argc; char *argv[]; { int sockfd; struct sockaddr_in serv_addr; pname = argv[0]; if(argc==3){ printf("Using %s:%s as server \n",argv[1],argv[2]); memset((char *) &serv_addr, 0,sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr=inet_addr(argv[1]); serv_addr.sin_port=htons((u_short)atoi(argv[2])); }else{ /* Fill in the structure "serv_addr" with the * address of the server that we want to connect with. */ memset((char *) &serv_addr, 0,sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr=inet_addr(SERV_HOST_ADDR); serv_addr.sin_port =htons(SERV_TCP_PORT); } /* Open a TCP socket (an Internet stream socket)*/ if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){ perror("client: can't open stream socket"); exit(); } /* Connect to the server.*/ if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){ perror("client: can't connect to server"); exit(); } tcp_client(sockfd); /* do it all */ close(sockfd); exit(0); } void tcp_client(sockfd) int sockfd; { int n; char mess[MAXLINE 1]; char recvbuf[MAXLINE 1]; printf("Please Input Your Message :"); gets(mess); write(sockfd,mess,strlen(mess)); n=read(sockfd,recvbuf,MAXLINE); if(n<0) perror("error in receving server message !"); recvbuf[n]=0; fputs(recvbuf,stdout); }
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-17 14:46:46 IP:218.32.xxx.xxx 未訂閱
Fone 你好:    最近玩了一點點 Thread...參考看看....Delphi 的...因為你問題在 Delphi 區
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-17 23:25:59 IP:218.94.xxx.xxx 未訂閱
< >您的问题放错地方了!< > 风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-04-26 13:51:38 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-05-18 13:16:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!