c语言多客户端同时连接服务器,c语言 socket 网络编程 一个客户端,多个服务器问题...

服务器代码:

#include 

#include 

#include 

#include 

#pragma comment(lib, "wsock32.lib")

SOCKET sck,consck[10];

int cur = 0;

struct sockaddr_in temp[10];

void  listen_proc(void * pdummy)

{

int index = cur;

cur++;

char buf[256]; int r = 0;

for(;;)

{

memset(buf, 0, 256);

r = recv(consck[index], buf, 256, 0);

if (r 

printf("收到%s的数据:%s\n", inet_ntoa(temp[index].sin_addr ), buf);

}

return;

}

void  accept_proc(void * pdummy)

{

for(int i = 0;1;i++)

{

int length = sizeof(temp[i]);

consck[i] = accept(sck, (struct sockaddr *)&temp[i], &length);

printf("%s接收成功...\n", inet_ntoa(temp[i].sin_addr ));

_beginthread(&listen_proc, 0, 0);

}

return;

}

void main()

{

/*Socket()*/

WSAData w;

memset(&w, 0, sizeof(w));

if(WSAStartup(0x0101, &w)) //启动Socket

{

printf("启动Socket失败!");

exit(0);

}

printf("启动Socket成功...\n");

sck = socket(AF_INET, SOCK_STREAM, 0); //创建Socket

printf("创建Socket成功...\n");

/*Bind(),绑定ip地址和端口号*/

struct sockaddr_in my_addr;

memset(&my_addr, 0, sizeof(my_addr));

my_addr.sin_family = AF_INET; //设置版本

my_addr.sin_port = htons(10000); //设置端口号

my_addr.sin_addr.S_un.S_addr =  INADDR_ANY; //设置服务器IP地址

//my_addr.sin_addr.S_un.S_addr =  inet_addr(ip); //设置服务器IP地址

if(bind(sck, (sockaddr *)&my_addr, sizeof(my_addr)) == SOCKET_ERROR)

{

printf("绑定Scoket失败!\n");

exit(0);

}

printf("绑定Socket成功...\n");

/*Listen()*/

listen(sck, 5);

printf("服务器监听状态...\n");

/*Accept()*/

_beginthread(&accept_proc, 0, 0);

/*Send()*/

char buf[256];

int s;

do

{

memset(buf, 0, 256);

gets(buf);

s = send (consck[0], (char *)&buf, sizeof(buf),0);

if ( s 

}

while(!strstr(buf, "exit"));

WSACleanup();

}

客户端代码:

#include 

#include 

#include 

#include 

#pragma comment(lib, "wsock32.lib")

SOCKET sck;

void  listen_proc(void * pdummy)

{

char buf[256]; int r = 0;

for(;;)

{

memset(buf, 0, 256);

r = recv(sck , buf, 256, 0);

if (r 

printf("收到数据:%s\n", buf);

}

return;

}

void main()

{

/*Socket()*/

WSAData w; memset(&w, 0, sizeof(w));

if(WSAStartup(0x0101, &w)) //启动Socket

{

printf("启动Socket失败!");

exit(0);

}

printf("启动Socket成功...\n");

sck = socket(AF_INET, SOCK_STREAM, 0); //创建Socket

printf("创建Socket成功...\n");

/*Connet()*/

hostent *phost=gethostbyname("我的域名");

in_addr addr;

char* ip;

for(int i=0;;i++)

{

char *p=phost->h_addr_list[i];

if(p==NULL)

break;

memcpy(&addr.S_un.S_addr,p,phost->h_length);

ip = inet_ntoa(addr);

}

struct sockaddr_in client;

client.sin_family = AF_INET; //设置版本

client.sin_port = htons(10000); //设置端口号

client.sin_addr.S_un.S_addr = inet_addr(ip); //设置IP地址

//client.sin_addr.S_un.S_addr = inet_addr("192.168.1.22"); //设置IP地址

if(connect(sck, (struct sockaddr *)&client, sizeof(sockaddr)))

{

printf("服务器连接失败!\n");

exit(0);

}

printf("服务器连接成功...\n");

/*Recv()*/

printf("开始接收信息...\n");

_beginthread(&listen_proc, 0, 0);

/*Send()*/

char buf[256];

int s;

do

{

memset(buf, 0, 256);

gets(buf);

s = send (sck, (char *)&buf, sizeof(buf),0);

if ( s 

}

while(!strstr(buf, "exit"));

WSACleanup();

}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值