C语言版Socket通信原理附运行截图Word下载.docx
- 文档编号:14035103
- 上传时间:2022-10-17
- 格式:DOCX
- 页数:9
- 大小:146.47KB
C语言版Socket通信原理附运行截图Word下载.docx
《C语言版Socket通信原理附运行截图Word下载.docx》由会员分享,可在线阅读,更多相关《C语言版Socket通信原理附运行截图Word下载.docx(9页珍藏版)》请在冰豆网上搜索。
你可以理解为IP地址确定了网内的唯一计算机,而端口号则指定了将消息发送给哪一个应用程序(大多应用程序启动时会主动绑定一个端口,如果不主动绑定,操作系统自动为其分配一个端口)。
Socket的类型
Stream:
一种流式Socket,针对于面向连接的TCP服务应用,安全,但效率低。
(本文重点)
charname[20];
}d[N];
intfd(char*stum,intn)
{
inti,j;
FILE*fp;
char*res="
"
;
fp=fopen("
D:
\\student.txt"
"
r"
);
for(i=0;
i<
n;
i++)
fscanf(fp,"
%s\t%s"
&
d[i].no,&
d[i].name);
fclose(fp);
for(j=0;
j<
j++)
{
if(strcmp(d[j].no,stum)==0)
{res=d[j].name;
break;
}
res="
nothisstudent!
}
returnres;
intstuno()
inti=1;
charc;
while(!
feof(fp)){
while(c=='
\n'
)
i++;
c=fgetc(fp);
continue;
returni;
intmain()
WSADATAwsaData;
WSAStartup(MAKEWORD(2,2),&
wsaData);
SOCKETs=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
structsockaddr_insockaddr;
sockaddr.sin_family=PF_INET;
sockaddr.sin_addr.S_un.S_addr=inet_addr("
192.168.1.118"
sockaddr.sin_port=htons(8000);
bind(s,(SOCKADDR*)&
sockaddr,sizeof(SOCKADDR));
listen(s,1);
printf("
listeningonport[%d].\n"
8000);
inti=stuno();
%d"
i);
while(TRUE)
SOCKADDRclientAddr;
intsize=sizeof(SOCKADDR);
SOCKETclientsocket;
clientsocket=accept(s,&
clientAddr,&
size);
***SYS***Newclienttouched.\n"
char*msg="
Hello,myclient.\r\n"
send(clientsocket,msg,strlen(msg)+sizeof(char),NULL);
printf("
***SYS***HELLO.\n"
charbuffer[MAXBYTE]={0};
recv(clientsocket,buffer,MAXBYTE,NULL);
***Client***%s\n"
buffer);
char*msg2=fd(buffer,i);
send(clientsocket,msg2,strlen(msg)+sizeof(char),NULL);
closesocket(clientsocket);
closesocket(s);
WSACleanup();
return0;
(第一次运行不成功,需要修改如下设置:
Settings->
Compilersettings->
otheroptions添加-std=c99
LinerSettings->
Linkersettings->
addC:
\软件\Codeblocks\MinGW\lib\libws2_32.a
客户端代码:
#include<
stdio.h>
winsock2.h>
Windows.h>
#pragmacomment(lib,"
ws2_32"
Sleep(2000);
sockaddr.sin_port=htons(8000);
connect(s,(SOCKADDR*)&
recv(s,buffer,MAXBYTE,NULL);
***SERVER***%s"
charszText[256];
gets(szText);
szText[255]='
\0'
send(s,szText,strlen(szText),0);
charbuffers[MAXBYTE]={0};
recv(s,buffers,MAXBYTE,NULL);
***SERVER***%s\n"
buffers);
closesocket(s);
WSACleanup();
getchar();
exit(0);
系统界面截图:
本地ip:
192.168.1.118
服务端开启监听:
客户端建立连接:
服务端的回复:
实验总结:
socket()是用来创建一个,然后返回值是这个socket的描述符,很类似与文件描述符。
bind()是用来为这个socket绑定server的IP+port地址,当然绑定之前要先对server的地址进行初始化。
listen()的作用是监听client的请求,第二个参数规定了这个刚刚创建的socket可以接受几个client的服务请求。
一旦accept()了一个client的请求,就获得了这个client的地址。
操作系统就会又给它分配了一个socket,也就是accept的返回值,用来传输数据。
也就是说,TCP开了2个socket,一个用来监听子进程,一个用来传输数accept之后就可以自由发挥,开始进行网络I/O了!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言版 Socket 通信 原理 运行 截图