防QQ聊天软件客户端

#include “myhead.h”
#include “kernel_list.h”
/*
tcp实现多人聊天
多客户端连接服务器,服务器作为中转站
客户端的代码
*/
int bmpnum=1;

//封装显示UI
void show_ui()
{
printf("*************************\n");
printf(“输入信息的格式如下:\n”);
printf(“ip:真实信息 --》发送给对应ip的客户端\n”);
printf(“server:真实信息 --》发送服务器\n”);
printf(“all:真实信息 --》发送给目前连接成功的所有客户端(排除自己)\n”);
printf(“输入getlist可以获取服务器上存放的用户链表信息!\n”);
}
int main(int argc,char **argv)
{
int ret;
pthread_t id;
char sbuf[100];
char rbuf[1024];
//定义一个ipv4地址结构体变量并初始化
struct sockaddr_in bindaddr;
bzero(&bindaddr,sizeof(bindaddr));
bindaddr.sin_family=AF_INET;
//由于存在字节序的问题,需要转换
bindaddr.sin_port=htons(atoi(argv[1]));//程序员自己指定,客户端的端口号
bindaddr.sin_addr.s_addr=htonl(INADDR_ANY);//绑定,客户端自己的ip

struct sockaddr_in girladdr;
bzero(&girladdr,sizeof(girladdr));
girladdr.sin_family=AF_INET;
girladdr.sin_port=htons(atoi(argv[2])); //服务器的端口号
girladdr.sin_addr.s_addr=inet_addr("192.168.11.86"); //服务器自己的ip

//买手机--》创建tcp套接字
iphonex=socket(AF_INET,SOCK_STREAM,0);
if(iphonex==-1)
{
	perror("创建tcp失败!\n");
	return -1;
}
int value=1;
//取消绑定限制
setsockopt(iphonex,SOL_SOCKET,SO_REUSEADDR,&value,sizeof(value));
//绑定ip地址和端口号
ret=bind(iphonex,(struct sockaddr *)&bindaddr,sizeof(bindaddr));
if(ret==-1)
{
	perror("绑定失败!\n");
	return -1;
}
//拨号连接服务器
ret=connect(iphonex,(struct sockaddr *)&girladdr,sizeof(girladdr));
if(ret==-1)
{
	perror("连接失败!\n");
	return -1;
}
//显示人机交互界面

struct stat mystat;
int overplus;
int i=0;
int fd=open(argv[3],O_RDWR);
stat(argv[3],&mystat);
overplus=mystat.st_size;
char buf[mystat.st_size];
read(fd,buf,mystat.st_size);

//分段发送给ubuntu服务器
while(1) 
{
	if(overplus>=2000)//i从0开始
		send(iphonex,buf+2000*i,2000,0); //两种情况:文件<=2000字节   文件>2000字节
	else
	{
		send(iphonex,buf+2000*i,overplus,0);
		break;
	}
	i++;	
	overplus=overplus-2000;
}

show_ui();

//创建线程专门接收服务器转发过来的信息
pthread_create(&id,NULL,recvserver,NULL);
while(1)
{
	//循环发送信息给服务器
	bzero(sbuf,100);
	printf("请输入要发送给服务器的信息!\n");
	scanf("%s",sbuf);
	ret=send(iphonex,sbuf,strlen(sbuf),0);
}


//挂机
close(iphonex);
return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值