一个UNIX下面的程序
socketfd = socket(AF_INET,SOCK_STREAM,0);
close(socketfd); // 这句对吗 ? 我只知道有shundown,closesocket
socketfd = socket(AF_INET,SOCK_STREAM,0);
close(socketfd); // 这句对吗 ? 我只知道有shundown,closesocket
解决方案 »
- 可以这样吗:不用声明函数,就可以调用吗(自己增加的函数,Tcpmp用)
- 高手们快过来啊,救救我这个菜鸟啊
- 寻人写远程推送安装的程序
- 各位大侠请教一下: 如何使用vc和flash 进行双向通信,我是指双向。
- SDK和MFC中,分别怎么表示用SendMessage向一个窗体发送 按下键盘上的数字键1???谢谢
- 如何判断一个进程是不是系统进程?(不通过文件名)
- 关于CArray<CPoint,CPoint>的问题,请指教
- Winsock API 服务端如何停止监听?
- SOS!!mainframe类函数栈中生成的对话框不能使用mainframe类的从CAsyncSocket派生的socket?在mainframe类中同样的使用是好的!!怎么解决?
- 怎样结束循环体?
- 如何实现动态修改工具提示
- OpenSCManager()返回IO_PENDING?
俺也只知道VB里面的Socket编程,呵呵,不好意思!
#define WIN32
#include <windows.h>
#include <winsock.h>
#else
#define closesocket close //unix下关闭套接字用 close
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#endif#include <stdio.h>
#include <string.h>#define PROTOPORT 5193 /* 缺省协议端口号 */
#define QLEN 6 /* 请求队列大小 */int visits = 0; /* 计数客户连接 */
/*------------------------------------------------
*程序:server
*目的:分配一个套接字,然后反复执行如下几步
* (1) 等待客户的下一个连接
* (2) 发送一个短消息给客户
* (3) 关闭连接
* (4) 转向(1)步
*
*语法:server [ port ]
*
* port - 使用的协议端口号
*
*注意:端口号可选。如果未指定端口号,服务器使用PROTOPORT中给定的缺省协议端口号
*-------------------------------------------------
*/main(argc,argv)
int argc;
char *argv[];
{
struct hostent *ptrh; /* 指向主机列表中一个条目的指针 */
struct protent *ptrp; /* 指向协议列表中一个条目的指针 */
struct sockaddr_in cad; /* 存放客户IP地址的结构 */
struct sockaddr_in sad; /* 存放服务器IP地址的结构 */
int sd,sd2; /* 套接字 */
int port; /* 协议端口号 */
int alen; /* 地址长度 */
char buf[1000]; /* 供服务器发送字符串所用的缓冲 */#ifdef WIN32
WSADATA wsaData; //windows下初始化socket环境
WSAStartup(0x0101,&wsaData);
#endif
memset((char *)&sad,0,sizeof(sad)); /* 清空sockaddr结构 */
sad.sin_family=AF_INET; /* 设置互联网协议族 */
sad.sin_addr.s_addr=INADDR_ANY; /* 设置本机IP地址 */
if(argc>1)
{
port=atoi(argv[1]); /* 将参数转换成二进制*/
}
else
{
port=PROTOPORT; /* 使用缺省端口 */
}
if(port>0) /* 测试是否是合法的值*/
{
sad.sin_port=htons((u_short)port);
}
else /* 打印错误信息并退出*/
{
fprintf(stderr,"bad port number: %s\n",argv[1]);
exit(1);
}
/* 将TCP传输协议名映射为协议号 */
ptrp=getprotobyname("tcp");
if(ptrp==NULL)
{
fprintf(stderr,"cannot map \"tcp\" to protocol number");
exit(1);
}
/* 创建一个套接字 */
sd=socket(PF_INET,SOCK_STREAM,ptrp->p_proto);
if(sd < 0)
{
fprintf(stderr,"socket creation failed\n");
exit(1);
}
/* 将本地地址绑定到套接字 */
if(bind(sd,(struct sockaddr *)&sad,sizeof(sad))<0)
{
fprintf(stderr,"bind failed");
exit(1);
}
/* 指定请求队列的长度 */
if(listen(sd,QLEN) < 0)
{
fprintf(stderr,"listen failed\n");
exit(1);
} /* 主服务器循环--接受和处理请求 */
while(1)
{
alen=sizeof(cad);
if((sd2=accept(sd,(struct sockaddr *)&cad,&alen))<0)
{
fprintf(stderr,"accept failed\n");
exit(1);
}
visits++;
sprintf(buf,"This server has been contacted %d time%s\n" ,visits,visits==1?".":"s.");
send(sd2,buf,strlen(buf),0);
closesocket(sd2);
}
}
shutdown就是在设置相应的参数后,看是否停止收或发了,
没有什么的,一般不用,而是直接closesocket
但closesocket是一定要的