当前位置: 技术问答>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))
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!