Skip to content

Instantly share code, notes, and snippets.

@ictlyh
Created November 30, 2016 09:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ictlyh/6c087000728f21a8dfef6e003cf1e257 to your computer and use it in GitHub Desktop.
Save ictlyh/6c087000728f21a8dfef6e003cf1e257 to your computer and use it in GitHub Desktop.
Socket demo.
// server.c
/*
* Demo of socket server.
* Build: gcc server.c -o server
* Run: ./server
*/
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int listenfd = 0, connfd = 0;
struct sockaddr_in serv_addr;
char sendBuff[1025];
time_t ticks;
listenfd = socket(AF_INET, SOCK_STREAM, 0);
memset(&serv_addr, '0', sizeof(serv_addr));
memset(sendBuff, '0', sizeof(sendBuff));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(5000);
bind(listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
printf("Bind success\n");
listen(listenfd, 3);
printf("listening port 5000...\n");
while (1) {
connfd = accept(listenfd, (struct sockaddr*)NULL, NULL);
printf("Accepted...\n");
int record_count = 1000;
int count = record_count;
strcpy(sendBuff, "1,luo\n");
while (count--) {
write(connfd, sendBuff, strlen(sendBuff));
}
close(connfd);
printf("Send count: %d", record_count);
}
return 0;
}
// client.c
/*
* Demo of socket client.
* Build: gcc client.c -o client
* Run: ./server
*/
#include <arpa/inet.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
int sockfd = 0, n = 0;
char recvBuff[1024];
struct sockaddr_in serv_addr;
if (argc != 3) {
fprintf(stderr, "Usage: %s <ip of server> <port of server>\n",argv[0]);
return 1;
}
memset(recvBuff, '0',sizeof(recvBuff));
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
fprintf(stderr, "Error : Could not create socket \n");
return 1;
}
memset(&serv_addr, '0', sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(atoi(argv[2]));
if (inet_pton(AF_INET, argv[1], &serv_addr.sin_addr)<=0) {
fprintf(stderr, "inet_pton error occured\n");
return 1;
}
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
fprintf(stderr, "Error : Connect Failed \n");
return 1;
}
while (1) {
int recvsize = recv(sockfd, recvBuff, 1024, 0);
if (recvsize == 0) break;
else if (recvsize == -1) {
fprintf(stderr, "Read error\n");
break;
}
recvBuff[recvsize] = '\0';
fprintf(stdout, "%s", recvBuff);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment