会socket编程的进来看看

seilfer2000 2003-12-08 05:11:12
一个UNIX下面的程序
socketfd = socket(AF_INET,SOCK_STREAM,0);
close(socketfd); // 这句对吗 ? 我只知道有shundown,closesocket
...全文
90 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
freeinsky 2003-12-09
  • 打赏
  • 举报
回复
shundown这个是看程序的需要了,不一定是必须的
shutdown就是在设置相应的参数后,看是否停止收或发了,
没有什么的,一般不用,而是直接closesocket
但closesocket是一定要的
henrynj 2003-12-09
  • 打赏
  • 举报
回复
//这个程序unix和windows都可以用看看吧

#ifndef unix
#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);
}
}
seilfer2000 2003-12-09
  • 打赏
  • 举报
回复
谁能给个标准的答案?
sboom 2003-12-08
  • 打赏
  • 举报
回复
不一定要先 shutdown的。
aaasng 2003-12-08
  • 打赏
  • 举报
回复
不可以,要用closesocket,最好先shundown
badguy2002 2003-12-08
  • 打赏
  • 举报
回复
对的吧,socketfd 是一个句柄,应该可以用close关闭,当然也可以用closesocket()
bborn 2003-12-08
  • 打赏
  • 举报
回复
来学习 不会
Bandry 2003-12-08
  • 打赏
  • 举报
回复
应该先shundown,然后closesocket吧
longki 2003-12-08
  • 打赏
  • 举报
回复

俺也只知道VB里面的Socket编程,呵呵,不好意思!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧