?? server.c
字號:
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <errno.h>
/*
服務端程序,用于偵聽8003端口,如果有連接這個端口
則,向這個端口發送100個整形數。
*/
#define SERVER_PORT 8003
void send_seq(int sockfd,int *data,int num_bytes)
{
/*
記住,發送數據的時候,也要進行順序轉換
*/
int net_data;
net_data=htons(*data);
write(sockfd,&net_data,num_bytes);
}
int main()
{
int sockfd;
int connfd;
int seq_data;
int namelen;
/*
用于存放服務器或者本機的信息,ip和端口
*/
struct sockaddr_in server_addr;
/*
打開一個socket,第一個參數,是指TCP/IP,第二個參數,指明這是
套接字流,第三個,一般不指明,默認為0
*/
sockfd=socket(PF_INET,SOCK_STREAM,0);
if(sockfd < 0)
{
fprintf(stderr,"socket error!\n");
exit(1);
}
/*
對這個結構體賦值,主要有三個地方要賦值,
一個是地址類型
之后,是IP,用INADDR_ANY,指出,使用本機IP
三,是服務器,監聽的端口
后兩個參數都要進行順序轉換
*/
server_addr.sin_family=PF_INET;
server_addr.sin_addr.s_addr=INADDR_ANY;
server_addr.sin_port=htons(SERVER_PORT);
/*
將信息綁定到這個這個套接字描述符
*/
if(bind(sockfd,&server_addr,sizeof(server_addr))<0)
{
perror("bind error!\n");
fprintf(stderr,"bind error!\n");
exit(2);
}
/*
開始監聽,監聽隊列是2個,如果沒有鏈接,則一直阻塞下去
*/
if(listen(sockfd,2)<0)
{
fprintf(stderr,"listen error !\n");
exit(3);
}
/*
有連接進來了。
*/
namelen=sizeof(server_addr);
/*
從傾聽套接字的完成連接隊列中接收一個連接,返回描述符
*/
connfd=accept(sockfd,&server_addr,&namelen);
if(connfd<0)
{
fprintf(stderr,"connect fd error!\n");
exit(4);
}
/*
取出這個連接描述符,然后朝這個描述符發送數據
*/
for(seq_data=1;seq_data<=100;seq_data++)
{
send_seq(connfd,&seq_data,sizeof(int));
}
close(connfd);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -