当前位置: 技术问答>linux和unix
select客户端的使用
来源: 互联网 发布时间:2016-04-05
本文导语: 环境:RedHat Enterprise Linux AS 4 + C(C语言) 我想请问一下,客户端如何使用select呢?客户的功能是发送一条数据给服务端,然后等待接收服务端的返回数据。 是不是要监视某个描述符是否可写,可写就发送数据?那...
环境:RedHat Enterprise Linux AS 4 + C(C语言)
我想请问一下,客户端如何使用select呢?客户的功能是发送一条数据给服务端,然后等待接收服务端的返回数据。
是不是要监视某个描述符是否可写,可写就发送数据?那是在什么情况下就可以写了呢?
我在connect之后就监听描述符,但是不行,没有可写的描述符。
谢谢!
我想请问一下,客户端如何使用select呢?客户的功能是发送一条数据给服务端,然后等待接收服务端的返回数据。
是不是要监视某个描述符是否可写,可写就发送数据?那是在什么情况下就可以写了呢?
我在connect之后就监听描述符,但是不行,没有可写的描述符。
谢谢!
|
一个简单例子:
Socket Programming
Socket Programming
#include
#include
#include
#include
#include
#include
#define buflen 512
unsigned int portno = 3333;
char hostname[] = "192.168.100.2";
char *buf[buflen]; /* declare global to avoid stack */
void dia(char *sz) { printf("Dia %sn", sz); }
int printFromSocket(int sd, char *buf)
{
int len = buflen+1;
int continueflag=1;
while((len >= buflen)&&(continueflag)) /* quit b4 U read an empty socket */
{
len = read(sd, buf, buflen);
write(1,buf,len);
buf[buflen-1]=''; /* Note bug if "Finished" ends the buffer */
continueflag=(strstr(buf, "Finished")==NULL); /* terminate if server says "Finished" */
}
return(continueflag);
}
main()
{
int sd = socket(AF_INET, SOCK_STREAM, 0); /* init socket descriptor */
struct sockaddr_in sin;
struct hostent *host = gethostbyname(hostname);
char buf[buflen];
int len;
/*** PLACE DATA IN sockaddr_in struct ***/
memcpy(&sin.sin_addr.s_addr, host->h_addr, host->h_length);
sin.sin_family = AF_INET;
sin.sin_port = htons(portno);
/*** CONNECT SOCKET TO THE SERVICE DESCRIBED BY sockaddr_in struct ***/
if (connect(sd, (struct sockaddr *)&sin, sizeof(sin))