Q&A
C言語でソケットを用いて簡易的なチャットを作ろうと思っているのですが
今考えているような構成にするにはどうすれば良いのでしょうか?
1.複数のクライアントが一つのサーバに接続できるようにする
2.複数のクライアントが一つのサーバに接続して、それぞれのクライアントがサーバに送信したメッセージをサーバがすべてのクライアントに送信する
以上二つを最低限行いたいのですが今自分でやっているものはサーバからしか送信できず、
一つのサーバに一つのクライアントしか接続できません
以下にコードを記入します。
完成度が非常に低いコードで大変申し訳ないのですが
どなたかご助力お願いします。
cliant.c
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
struct sockaddr_in server;
int sock;
char add[32];//送り先IPアドレス
char buf[50];
char namae[30];//あってるかわからん
int n;
printf("IPアドレスを入力してね\n");
scanf("%s",&add);
sock = socket(AF_INET, SOCK_STREAM, 0);
server.sin_family = AF_INET;
server.sin_port = htons(12345);
server.sin_addr.s_addr = inet_addr(add);
connect(sock, (struct sockaddr *)&server, sizeof(server));
read(sock, namae, sizeof(namae));
//接続先サーバの名前の確認
printf("接続先は%sサーバです。\n",namae);
//文章の受信
while(1){
memset(buf, 0, sizeof(buf));
n = read(sock, buf, sizeof(buf));
if(n < 1)
break;
printf("%s:%s",namae,buf);
}
close(sock);
return 0;
}
server.c
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include<unistd.h>
#include <arpa/inet.h>
int main()
{
int sock0;
struct sockaddr_in addr;
struct sockaddr_in client;
int len;
int sock;
char a[50];
char name[30];
printf("名前を入力してね:");
scanf("%s",&name);
sock0 = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
addr.sin_addr.s_addr = INADDR_ANY;
bind(sock0, (struct sockaddr *)&addr, sizeof(addr));
listen(sock0, 5);
len = sizeof(client);
sock = accept(sock0, (struct sockaddr *)&client, &len);
//あってるかわからん
//fgets(name , 30 , stdin);
write(sock, name, 30);
while (1) {
printf("%s:",name);
fgets(a , 50 , stdin);
write(sock, a, 50);
}
close(sock);
close(sock0);
return 0;
}
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2015/10/09 06:35