資源簡介
以前寫的網絡編程,壓縮包內包括TCP客戶端和TCP服務器,用到線程,編譯時記得加上-lpthread

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
void?*recv_handler(void?*arg);
int?main(int?argc?char?**argv)
{
if(argc?3)
{
printf(“using:app?ip?port\n“);
return?-1;
}
//1.創建套接字
int?sockfd?=?socket(AF_INET?SOCK_STREAM?0);
if(sockfd?0)
{
perror(“socket?fail“);
return?-1;
}
//2.連接服務器
struct?sockaddr_in?servaddr;
bzero(&servaddr?sizeof(servaddr));
servaddr.sin_family?=?AF_INET;
servaddr.sin_port?=?htons(atoi(argv[2]));
servaddr.sin_addr.s_addr?=?inet_addr(argv[1]);
int?ret?=?connect(sockfd?(struct?sockaddr*)&servaddr?sizeof(servaddr));
if(ret?0)
{
perror(“connect?fail:“);
close(sockfd);
return?-1;
}
//啟動線程用來專門讀取數據
pthread_t?id?=0;
ret?=?pthread_create(&id?NULL?recv_handler?(void?*)&sockfd);
pthread_detach(id);
int?selfid?=?0;
printf(“selfid:“);scanf(“%d“?&selfid);
while(1)
{
int?toid?=?0;
char?data[1024]={0};
printf(“toid:“);scanf(“%d“?&toid);
printf(“data:“);scanf(“%s“?data);
char?sendbuf[1024]={0};
sprintf(sendbuf?“id:%dto:%ddata:%s“?selfid?toid?data);
write(sockfd?sendbuf?strlen(sendbuf)+1);
}
close(sockfd);
return?0;
}
void?*recv_handler(void?*arg)
{
int?sockfd=?*((int?*)arg);
//讀取客戶端數據
char?recvbuf[1024]={0};
while(1)
{
int?ret?=?read(sockfd?recvbuf?1024);//阻塞
if(ret?<=?0)
{
//客戶端掉線
break;
}
printf(“recvbuf?=?%s\n“?recvbuf);
memset(recvbuf?0?sizeof(recvbuf));
}
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????1546??2018-01-09?10:16??tcpclient.c
?????文件????????2856??2018-01-09?11:08??tcp_tran_server.c
- 上一篇:家族族譜管理,數據結構
- 下一篇:電動汽車有序充放電
評論
共有 條評論