PAGE 3
1
一个简单的客户端/服务器程序的设计与实现
实验的目的和要求:
1、熟悉C编程环境。
2、熟悉套接字编程原理,掌握简单的套接字编程。
实验装置:
硬件: PC
软件:代码块
实验内容和步骤:
插座是什么?
Socket用英语直译为“孔或插座”,也称为插座。 用于描述IP地址和端口号,是进程之间的通信机制。 请注意,IP地址决定了网络中唯一的计算机,端口号指定了发送消息的APP应用程序。 (大多数APP应用程序在启动时主动绑定端口,如果不主动绑定端口,操作系统会自动分配端口。 )。
套接字类型
流:面向面向连接的TCP服务APP应用的安全但效率低下的流套接字。 (正文重点)
Datagram :数据报格式的套接字对未连接的UDP服务APP应用不安全(丢失、顺序混乱、接收方经常分析完整性、重新定位或请求重发)。
套接字程序的常见APP应用模式和执行过程
服务器端启动套接字,开始监听端口,并监听客户端连接信息。 这叫做Watch Socket。
客户端套接字连接到服务器端的监听套接字,成功连接后,服务器端立即创建新的套接字,负责与客户端通信,然后客户端停止与Watch Socket通信。
Watch Socket可能会继续监听来自其他客户端的连接。
上述过程就像实现了三方会谈。 服务器端的套接字至少有两个。 一个是Watch Socket,每当成功接收到客户端的连接时,都会在服务器端创建通信套接字。 客户端套接字指定要连接的服务器端的地址和端口,并创建用于初始化到服务器的TCP连接的套接字对象。
编写用TCP协议实现的客户端和服务器端程序,调试通过。
程序分为客户端程序和服务器程序两部分。
工作过程是首先启动服务器,创建套接字,然后等待客户连接。一旦客户启动并创建套接字,然后建立与服务器的连接,客户就会收到键盘输入并将数据发送到服务器。 当服务器收到数据时,收到的字符将显示在屏幕上。 或者,当服务器接收到键盘输入、将数据发送到客户端、客户端接收到数据时,屏幕上将显示接收到的字符。
服务器端代码:
#包含
#包含
#pragmacomment(lib、(' ws2_32 ' ) () ) ) ) ) ) ) 652
#define N 20
结构化Stu
{
char no[20];
char name[20];
}d[N];
(intFD(char*stum,int n ) ) ) ) ) ) )。
{
int i,j;
FILE *fp
char* res=' ';
FP=fopen(d:(student.txt ),) r );
for(I=0; I
FP,' %st%s ',d[i].no,d[i].name;
流量(FP );
for(j=0; Jj
{
if(strcmp(d[j].no,stum )==0) )
{res=d[j].name;
布雷克; }
res='no this student!' ;
}
返回RES;
}
int stuno () ) )
{
FILE *fp
FP=fopen(d:(student.txt ),) r );
int i=1;
char c;
while (! feof(FP ) }
wile(c=='n ' ) ) ) ) ) ) )。
{
I;
布雷克;
}
c=fgetc(FP );
继续;
}
流量(FP );
返回I;
}
int main () )
{
WSADATA wsaData;
WSAstartup(makeword ) 2,2 ),wsaData );
sockets=socket(pf_inet,SOCK_STREAM,IPPROTO_TCP );
struct sockaddr_in sockaddr;
so