実現したいこと
C言語入門者が練習でTCP/IP通信のプログラムを作っています。一台のパソコンでサーバーとクライアントを担う予定です。
前提
VisualStudioCodeを使っています。
macOSで動くコードを参考に、windows環境でincludeを変更したのち、コンパイルができません。
gccを使ってコンパイルを試みると以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
C:\Users\AppData\Local\Temp\ccqSP3Qe.o:tcpip_client.c:(.text+0x69): undefined reference to `__imp_send' C:\Users\AppData\Local\Temp\ccqSP3Qe.o:tcpip_client.c:(.text+0xaa): undefined reference to `__imp_recv' C:\Users\AppData\Local\Temp\ccqSP3Qe.o:tcpip_client.c:(.text+0x12a): undefined reference to `__imp_socket' C:\Users\AppData\Local\Temp\ccqSP3Qe.o:tcpip_client.c:(.text+0x174): undefined reference to `__imp_htons' C:\Users\AppData\Local\Temp\ccqSP3Qe.o:tcpip_client.c:(.text+0x188): undefined reference to `__imp_inet_addr' C:\Users\AppData\Local\Temp\ccqSP3Qe.o:tcpip_client.c:(.text+0x1b2): undefined reference to `__imp_connect' collect2.exe: error: ld returned 1 exit status
該当のソースコード
C
1#include <winsock2.h>2#include<ws2tcpip.h>3#include <stdio.h>4#include <string.h>5#include <unistd.h>6#define SERVER_ADDR "127.0.0.1"7#define SERVER_PORT 80808#define BUF_SIZE 10249//関数のプロトタイプ宣言10int transfer(int);11//関数12int transfer(int sock) {13 char send_buf[BUF_SIZE], recv_buf;14 int send_size, recv_size;15 while (1) {16 /* サーバーに送る文字列を取得 */17 printf("Input Message...\n");18 scanf("%s", send_buf);19 send_buf[8] = '\n';20 send_buf[9] = 0;21 /* 文字列を送信 */22 send_size = send(sock, send_buf, strlen(send_buf) + 1, 0);23 if (send_size == -1) {24 printf("send error\n");25 break;26 }27 /* サーバーからの応答を受信 */28 recv_size = recv(sock, &recv_buf, 1, 0);29 if (recv_size == -1) {30 printf("recv error\n");31 break;32 }33 if (recv_size == 0) {34 /* 受信サイズが0の場合は相手が接続閉じていると判断 */35 printf("connection ended\n");36 break;37 }38 /* 応答が0の場合はデータ送信終了 */39 if (recv_buf == 0) {40 printf("Finish connection\n");41 break;42 }43 }44 return 0;45}46//メイン文47int main(void) {48 int sock;49 struct sockaddr_in addr;50 /* ソケットを作成 */51 sock = socket(AF_INET, SOCK_STREAM, 0);52 if (sock == -1) {53 printf("socket error\n");54 return -1;55 }56 /* 構造体を全て0にセット */57 memset(&addr, 0, sizeof(struct sockaddr_in));58 /* サーバーのIPアドレスとポートの情報を設定 */59 addr.sin_family = AF_INET;60 addr.sin_port = htons((unsigned short)SERVER_PORT);61 addr.sin_addr.s_addr = inet_addr(SERVER_ADDR);62 /* サーバーに接続要求送信 */63 printf("Start connect...\n");64 if (connect(sock, (struct sockaddr*)&addr, sizeof(struct sockaddr_in)) == -1) {65 printf("connect error\n");66 close(sock);67 return -1;68 }69 printf("Finish connect!\n");70 /* 接続済のソケットでデータのやり取り */71 transfer(sock);72 /* ソケット通信をクローズ */73 close(sock);74 return 0;75}
0 コメント