Skip to content

Commit 40faef2

Browse files
committed
optimize code
1 parent 23c0038 commit 40faef2

File tree

2 files changed

+54
-42
lines changed

2 files changed

+54
-42
lines changed

c/socket/client.c

Lines changed: 53 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,104 @@
11
#include <stdio.h>
22
#include <string.h>
33
#include <WinSock2.h>
4-
// #pragma comment(lib, "ws2_32.lib") //加载 ws2_32.dll
4+
// #pragma comment(lib, "ws2_32.lib") //load ws2_32.dll
5+
6+
#define FORMAT_MSG "GET %s HTTP/1.1\r\nHost: %s\r\nUser-Agent: curl/7.79.1\r\nAccept: */*\r\n\r\n"
57
68
typedef void Fun(char *);
79
810
#define MAXLINE 100
11+
#define MAXRECV 0xfff
912
10-
void get_admin(const char * url, char *admin)
13+
// get admin from url(String Slicing)
14+
void get_admin(const char *url, char *admin)
1115
{
12-
int start = 7;
13-
if (strstr(url, "https"))
14-
start++;
15-
char *ret = strchr(url+start, '/');
16-
int admin_len = ret ? ret-url-start : strlen(url)-start;
17-
18-
strncpy(admin, url+start, admin_len);
16+
int start = 7;
17+
if (strstr(url, "https"))
18+
start++;
19+
// String Slicing
20+
char *ret = strchr(url + start, '/');
21+
// String Slicing
22+
int admin_len = ret ? ret - url - start : strlen(url) - start;
23+
// String Slicing
24+
strncpy(admin, url + start, admin_len);
1925
}
2026
21-
void get_admin_ip(const char * url, char *ip)
27+
void get_admin_ip(const char *url, char *ip)
2228
{
23-
char admin[30];
29+
char admin[30];
2430
get_admin(url, admin);
2531
26-
struct hostent *phst = gethostbyname(admin);
27-
struct in_addr * iddr = (struct in_addr*)phst->h_addr;
28-
inet_ntoa(*iddr);
29-
strcpy(ip, inet_ntoa(*iddr));
32+
struct hostent *phst = gethostbyname(admin);
33+
struct in_addr *iddr = (struct in_addr *)phst->h_addr;
34+
inet_ntoa(*iddr);
35+
36+
// Convert the network address to the string format across the "."
37+
strcpy(ip, inet_ntoa(*iddr));
3038
}
3139
32-
int get_url_port(const char * url)
40+
// if url contians https, return 443, else return 80
41+
int get_url_port(const char *url)
3342
{
34-
char *ret = strstr(url, "https");
35-
36-
return ret ? 443 : 80;
43+
char *ret = strstr(url, "https");
44+
45+
return ret ? 443 : 80;
3746
}
3847
39-
void request(const char * sUrl, Fun fun)
48+
void request(const char *sUrl, Fun fun)
4049
{
4150
struct sockaddr_in servaddr;
42-
char buf[MAXBYTE];
43-
char format_msg[] = (
44-
"GET %s HTTP/1.1\r\n"
45-
"Host: %s\r\n"
46-
"User-Agent: curl/7.79.1\r\n"
47-
"Accept: */*\r\n\r\n"
48-
);
49-
char send_msg[strlen(format_msg) + strlen(sUrl)*2];
51+
char buf[MAXRECV + 1];
52+
// char format_msg[] = (
53+
// "GET %s HTTP/1.1\r\n"
54+
// "Host: %s\r\n"
55+
// "User-Agent: curl/7.79.1\r\n"
56+
// "Accept: */*\r\n\r\n"
57+
//);
58+
char send_msg[strlen(FORMAT_MSG) + strlen(sUrl) * 2];
5059
char admin[30];
51-
char ip[20];
52-
int port;
60+
char ip[20];
61+
int port;
5362
int r;
5463
SOCKET sockfd;
5564

56-
WSADATA wsaData;
57-
WSAStartup(MAKEWORD(2, 2), &wsaData);
65+
WSADATA wsaData;
66+
WSAStartup(MAKEWORD(2, 2), &wsaData);
5867

5968
port = get_url_port(sUrl);
6069
get_admin_ip(sUrl, ip);
61-
get_admin(sUrl, admin);
62-
sprintf(send_msg, format_msg, sUrl, admin);
70+
get_admin(sUrl, admin);
71+
sprintf(send_msg, FORMAT_MSG, sUrl, admin);
6372
// puts(send_msg);
6473

6574
sockfd = socket(AF_INET, SOCK_STREAM, 0);
6675

6776
memset(&servaddr, 0, sizeof(servaddr));
6877

6978
servaddr.sin_family = AF_INET;
70-
servaddr.sin_addr.s_addr = inet_addr(ip);
79+
servaddr.sin_addr.s_addr = inet_addr(ip);
7180
servaddr.sin_port = htons(port);
72-
81+
7382
connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
7483
send(sockfd, send_msg, strlen(send_msg), 0);
7584

76-
do {
77-
r = recv(sockfd, buf, MAXBYTE, 0);
85+
//分段接收处理
86+
do
87+
{
88+
r = recv(sockfd, buf, MAXRECV, 0);
7889
if (r < 255)
7990
buf[r] = '\0';
8091
fun(buf);
81-
} while(r == 255);
92+
} while (r == 255);
8293

8394
closesocket(sockfd);
84-
WSACleanup();
95+
WSACleanup();
8596

8697
return;
8798
}
8899

89-
void print_msg(char * str)
100+
// Example callback function
101+
void print_msg(char *str)
90102
{
91103
printf("%s", str);
92104
}

c/socket/server_socket.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def main():
88
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
99
tcp_server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
1010

11-
tcp_server_socket.bind(("0.0.0.0", 8000))
11+
tcp_server_socket.bind(("0.0.0.0", 5702))
1212
tcp_server_socket.listen(128)
1313

1414
while True:

0 commit comments

Comments
 (0)