C ソケット通信 sample
from https://qiita.com/kiki0817/items/343ee28a7cf73a14ebca
D1_word_read.c#include <stdio.h> //printf(), fprintf(), perror()
#include <sys/socket.h> //socket(), bind(), accept(), listen()
#include <arpa/inet.h> // struct sockaddr_in, struct sockaddr, inet_ntoa(), inet_aton()
#include <stdlib.h> //atoi(), exit(), EXIT_FAILURE, EXIT_SUCCESS
#include <string.h> //memset(), strcmp()
#include <unistd.h> //close()
#define MSGSIZE 1024
#define BUFSIZE (MSGSIZE + 1)
int server_open(const char *address, unsigned short port) {
int server;
struct sockaddr_in sockaddr;
memset(&sockaddr, 0, sizeof(sockaddr));
sockaddr.sin_family = AF_INET;
if (inet_aton(address, &sockaddr.sin_addr) == 0) {
fprintf(stderr, "Invalid IP Address.\n");
exit(EXIT_FAILURE);
}
if (port == 0) {
fprintf(stderr, "invalid port number.\n");
exit(EXIT_FAILURE);
}
sockaddr.sin_port = htons(port);
if ((server = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0) {
perror("socket() failed.");
exit(EXIT_FAILURE);
}
if (connect(server, (struct sockaddr*) &sockaddr, sizeof(sockaddr)) < 0) {
perror("connect() failed.");
exit(EXIT_FAILURE);
}
printf("connect to %s\n", inet_ntoa(sockaddr.sin_addr));
return server;
}
void server_send(int server, const char *data, int size) {
if (send(server, data, size, 0) <= 0) {
perror("send() failed.");
exit(EXIT_FAILURE);
}
}
int server_receive(int server, char *buffer) {
int totalSize = 0;
int receivedSize = recv(server, &buffer[totalSize], 100, 0);
if (receivedSize > 0) {
return receivedSize;
}
else if (receivedSize == 0) {
perror("ERR_EMPTY_RESPONSE");
exit(EXIT_FAILURE);
}
else {
perror("recv() failed.");
exit(EXIT_FAILURE);
}
}
void server_close(int server) {
if (close(server) == 0) {
perror("close() failed.");
exit(EXIT_FAILURE);
}
}
int request(char *buffer, int size) {
int i;
char cmd[BUFSIZE] = "500000FF03FF000018002004010000D*0000010001";
for (i = 0; i<strlen(cmd); i++) {
buffer[i] = cmd[i];
}
return strlen(buffer);
}
int main(int argc, char* argv[]) {
const char *address = "192.168.0.71";
unsigned short port = (unsigned short)atoi("5015");
int server = server_open(address, port);
char send_buffer[BUFSIZE];
char recv_buffer[BUFSIZE];
int size = request(send_buffer, BUFSIZE);
printf("%s\n", send_buffer);
server_send(server, send_buffer, size);
size = server_receive(server, recv_buffer);
printf("%s\n", recv_buffer);
}
ソケット通信のプログラムはC言語で学ぶソケットAPI入門 第1回 サーバ編を参考にさせていただきました.
留言
張貼留言