002
//服务器代码
003
///////////////////////////////////
004
//本文件是服务器的代码
005
#include <netinet/in.h> // for sockaddr_in
006
#include <sys/types.h> // for socket
007
008
#include <sys/socket.h> // for socket
009
#include <stdio.h> // for printf
010
#include <stdlib.h> // for exit
011
#include <string.h> // for bzero
012
#include <time.h> //for time_t and time
013
014
015
#define HELLO_WORLD_SERVER_PORT 7754
016
#define LENGTH_OF_LISTEN_QUEUE 20
017
#define BUFFER_SIZE 1024
018
019
020
int main(int argc, char **argv)
021
{
022
//设置一个socket地址结构server_addr,代表服务器internet地址,端口
023
struct sockaddr_in server_addr;
024
bzero(&server_addr,sizeof(server_addr)); //把一段内存区的内容全部设置为0
025
server_addr.sin_family = AF_INET;
026
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
027
server_addr.sin_port = htons(HELLO_WORLD_SERVER_PORT);
028
// time_t now;
029
FILE *stream;
030
031
032
//创建用于internet的流协议(TCP)socket,用server_socket代表服务器socket
033
int server_socket = socket(AF_INET,SOCK_STREAM,0);
034
if( server_socket < 0)
035
{
036
printf("Create Socket Failed!");
037
exit(1);
038
}
039
040
//把socket和socket地址结构联系起来
041
if( bind(server_socket,(struct sockaddr*)&server_addr,sizeof(server_addr)))
042
{
043
printf("Server Bind Port : %d Failed!", HELLO_WORLD_SERVER_PORT);
044
exit(1);
045
}
046
047
//server_socket用于监听
048
if ( listen(server_socket, LENGTH_OF_LISTEN_QUEUE) )
049
{
050
printf("Server Listen Failed!");
051
exit(1);
052
}
053
054
while (1) //服务器端要一直运行
055
{
056
057
struct sockaddr_in client_addr;
058
socklen_t length = sizeof(client_addr);
059
060
int new_server_socket = accept(server_socket,(struct sockaddr*)&client_addr,&length);
061
if ( new_server_socket < 0)
062
{
063
printf("Server Accept Failed!\n");
064
break;
065
}
066
067
char buffer[BUFFER_SIZE];
068
bzero(buffer, BUFFER_SIZE);
069
070
071
strcpy(buffer,"Hello,World!从服务器来!");
072
strcat(buffer,"\n"); //C语言字符串连接
073
074
075
send(new_server_socket,buffer,BUFFER_SIZE,0);
076
077
078
bzero(buffer,BUFFER_SIZE);
079
//接收客户端发送来的信息到buffer中
080
length = recv(new_server_socket,buffer,BUFFER_SIZE,0);
081
082
if (length < 0)
083
{
084
printf("Server Recieve Data Failed!\n");
085
exit(1);
086
}
087
printf("\n%s",buffer);
088
089
090
if((stream = fopen("data1","r"))==NULL)
091
{
092
printf("The file 'data1' was not opened! \n");
093
exit(1);
094
}
095
else
096
097
printf("The file 'filename' was opened! \n");
098
bzero(buffer,BUFFER_SIZE);
099
100
int lengsize = 0;
101
while((lengsize = fread(buffer,1,1024,stream)) > 0)
102
{
103
104
printf("lengsize = %d\n",lengsize);
105
106
if(send(new_server_socket,buffer,lengsize,0)<0)
107
{
108
printf("Send File is Failed\n");
109
break;
110
}
111
112
bzero(buffer, BUFFER_SIZE);
113
114
115
116
}
117
if(fclose(stream))
118
printf("The file 'data' was not closed! \n");
119
exit(1);
120
121
//关闭与客户端的连接
122
close(new_server_socket);
123
}
124
//关闭监听用的socket
125
close(server_socket);
126
return 0;
127
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[代码] client.c
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
本文介绍了一个简单的Linux下TCP网络编程示例,包括服务器端和客户端的代码实现。服务器监听特定端口并响应客户端请求,同时向客户端发送消息,并读取客户端发送的数据。客户端则连接到服务器,接收服务器发来的信息,并保存服务器发送的文件。
2817

被折叠的 条评论
为什么被折叠?



