Arama butonu
Bu konudaki kullanıcılar: 2 misafir, 1 mobil kullanıcı
3
Cevap
948
Tıklama
0
Öne Çıkarma
YARDIM: socket ile chat??
M
18 yıl
Teğmen
Konu Sahibi

Arkadaşlar socket programlama ile çok kullanıcılı chat programı yazmaya çalışıyorum. Fakat programda bir kullanıcı mesaj yazmadan diğeri yazamıyor. Yani hep sırayla yazışmak gerekiyor, üstüste yazılamıyor. Bu sorunu nasıl çözebilirim?
kodlar şöyle:

Client.c
//-------------
#include <winsock.h>
#include <winsock2.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define DEFAULT_PORT 5150

int g_port = DEFAULT_PORT; // Port on server to connect to
char g_szServerName[128] = "10.0.1.37"; //"KRANDAXP"; // Server to connect to

int main(void)
{
WSADATA wsaData; // if this doesn't work
//WSAData wsaData; // then try this instead

if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
fprintf(stderr, "WSAStartup failed.\n");
exit(1);
}
WSADATA wsd;
SOCKET sClient;
int ret, ch;
struct sockaddr_in server;
struct hostent *host = NULL;
char buf[1024];
if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) {
printf("Failed to load Winsock library!\n");
getch();
return 1;
}

//
// Create the socket, and attempt to connect to the server
//

sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET) {
printf("socket() failed: %d\n", WSAGetLastError());
getch();
return 1;
}
server.sin_family = AF_INET;
server.sin_port = htons(g_port);
server.sin_addr.s_addr = inet_addr(g_szServerName);

//
// If the supplied server address wasn't in the form
// "aaa.bbb.ccc.ddd" it's a hostname, so try to resolve it
//

if (server.sin_addr.s_addr == INADDR_NONE) {
host = gethostbyname(g_szServerName);
if (host == NULL) {
printf("Unable to resolve server: %s\n", g_szServerName);
getch();
return 1;
}
CopyMemory(&server.sin_addr, host->h_addr_list[0], host->h_length);
}
if (connect(sClient, (struct sockaddr *)&server, sizeof(server)) == SOCKET_ERROR) {
printf("connect() failed: %d\n", WSAGetLastError());
getch();
return 1;
}
printf("\a\a \n\t ---Yeni Baslayanlar icin Chat 1.0--- \n\t--A program by B&M Software ... Licenced--\n\n");
for (;;) {
buf[0]='\0';
printf("Me: ");
fgets(buf, sizeof(buf)+1, stdin);
if((send(sClient, buf, sizeof(buf), 0)) <= 0){ printf("Baglanti Koptu"); getch(); return 1; }
if((recv(sClient, buf, sizeof(buf), 0)) <= 0){ printf("Baglanti Koptu"); getch(); return 1; }
printf("Sunucu diyor ki: %s", buf);
}

closesocket(sClient);

WSACleanup();
getch();
return 0;
}

//------------------------------------------------------------------------------
server.c
//-------------
#include <winsock.h>
#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>
#define DEFAULT_PORT 5150

int g_port = DEFAULT_PORT;
char g_szAddress[128];
int main(void)
{
WSADATA wsd;
SOCKET sListen,sClient;
int addrSize;
struct sockaddr_in local, client;
char buffer[1024],buffer2[1024];

if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) {
printf("Failed to load Winsock!\n");
return 1;
}

sListen = socket(AF_INET, SOCK_STREAM, 0);

if (sListen == SOCKET_ERROR) {
printf("socket() failed: %d\n", WSAGetLastError());
return 1;
}

local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_family = AF_INET;
local.sin_port = htons(g_port);

if (bind(sListen, (struct sockaddr *)&local,
sizeof(local)) == SOCKET_ERROR) {
printf("Dinleme Hatasi: %d\n", WSAGetLastError());
return 1;
}

listen(sListen, 8);
printf("Dinleme Basladi, Yanit bekleniyor...\n");

for (;;)
{
addrSize = sizeof(client);
sClient = accept(sListen, (struct sockaddr *) &client, &addrSize);

if (sClient == INVALID_SOCKET)
{
printf("Baglanti Kabulu Hatasi: %d\n", WSAGetLastError());
break;
}

printf("istemci Kabul Edildi, istemci Adresi: %s:%d\n\a", inet_ntoa(client.sin_addr), ntohs(client.sin_port));

for(;;)
{
for(unsigned long i=0;i<1000000000;i++){
printf("x");
buffer2[0]='\0';
if((recv(sClient,buffer2, sizeof(buffer2), 0) == -1))
{printf("x1");
printf("Baglanti Koptu!!!");
break;
}
printf("x2");
if(buffer2)
printf("\nistemci diyor ki: %s", buffer2);
printf("x3");
}

printf("\nBen: ");
buffer[0]='\0';
fgets(buffer, sizeof(buffer), stdin);

if (send(sClient,buffer, sizeof(buffer), 0) == -1){
printf("Baglanti Koptu!!!");break;}

}
}
closesocket(sListen);

WSACleanup();

return 0;
}