欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
SOkit的C語言源程序
[打印本頁]
作者:
a13396561254
時間:
2019-6-30 22:25
標題:
SOkit的C語言源程序
有用的sokit
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<string.h>
#include<netdb.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#define PORT 4321
#define BUF_SIZE 1024
int main(int argc, char *argv[])
{
int sockfd, sendbytes, recvbytes;
char buf[BUF_SIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if(argc<2)
{// 檢查程序參數個
printf("USAGE: ./tclient Hostname(or ip address)\n");
exit(1);
}
//檢查程序參數指定的服務器地止
if((host = gethostbyname(argv[1])) == NULL)
{
perror("gethostbyname");
exit(1);
}
if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{// 創建一個流
socket perror("socket");
exit(1);
}
//初始化serv_addr結構體變
serv_addr.sin_family = AF_INET;
serv_addr.sin_port=htons(PORT);
serv_addr.sin_addr=*((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero), 8);
// 連接服務
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr)) == -1)
{perror("connect");
exit(1);
}// 顯示連接信
printf("connect to server %s...\nInput the msg to send:\n", argv[1]);
while (1)
{ // 循環發送、接收服務器信
bzero(buf, sizeof(buf));// 清空緩
if(fgets(buf, BUF_SIZE, stdin)) {
// 終端輸入一行數據
if (strcmp(buf, "exit\n") == 0) break;// 判斷是否退出循
if ((sendbytes = send(sockfd, buf, strlen(buf), 0)) == -1)
{ // 是否發送成功
perror("send");
exit(1);
}
}
bzero(buf, sizeof(buf));// 清空緩沖
if((recvbytes = recv(sockfd, buf, BUF_SIZE, 0)) == -1)
{
// 等待接收數據
perror("recv");
exit(1);
}
else printf("receive from %d(socket): %s\n", sockfd, buf); // 打印接收數據 }
close(sockfd);// 關閉
socket return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<string.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<time.h>
#include <string.h>
#include <sys/ioctl.h>
#include <arpa/inet.h>
#define PORT 4321
#define MAX_QUE_CONN_NM 5
#define MAX_SOCK_FD FD_SETSIZE
#define BUFFER_SIZE 1024
#define HOSTLEN 256
int main()
{
struct sockaddr_in server_sockaddr, client_sockaddr;
int sin_size, count;
fd_set inset, tmp_inset;
int sockfd, client_fd, fd;
char buf[BUFFER_SIZE];
// 接收、發送緩
struct sockaddr_in scinf[100];
// 客戶端地址池
bzero((void *)scinf, sizeof(scinf));
// 創建
socket if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket");
exit(1);
}
// 初始化服務器地址結構體
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(PORT);
server_sockaddr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_sockaddr.sin_zero), 8);
// 為bind設置地址復用
int i = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i));
if(bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}
// 開始偵聽客戶端連
if(listen(sockfd, MAX_QUE_CONN_NM) == -1)
{
perror("listen");
exit(1);
}
printf("Begin listening...\n");
// 準備非阻塞方式連接多路客戶端
FD_ZERO(&inset);
FD_SET(sockfd, &inset);
while (1)
{
tmp_inset = inset;
sin_size = sizeof(struct sockaddr_in);
memset(buf, 0, sizeof(buf));
if(!(select(MAX_SOCK_FD, &tmp_inset, NULL, NULL, NULL) > 0))
{//等待網絡消息
perror("select");
exit(1);
}
for(fd = 0; fd < MAX_SOCK_FD; ++fd)
{
if (FD_ISSET(fd, &tmp_inset) > 0)
{
if (fd == sockfd)
{// 有客戶端連接請求,accept
if((client_fd = accept(sockfd, (struct sockaddr*)&client_sockaddr, &sin_size))==-1)
{
perror("accept");
exit(1);
}
FD_SET(client_fd, &inset);
printf("New connection from %s\n", inet_ntoa(client_sockaddr.sin_addr));
if(client_fd < 100 && client_fd >= 0)// 新連接客戶端記入地址
memcpy((void *)(&scinf[client_fd]), (void *)&client_sockaddr, sin_size);
}
ellse
{
// 有客戶端數據
if((count = recv(fd, buf, BUFFER_SIZE, 0)) > 0)
{// 接收數
if(fd >= 0 && fd < 100)
printf("Received from %s:\t%s\n", inet_ntoa(scinf[fd].sin_addr), buf);
if((count = send(fd, buf, strlen(buf), 0)) == -1)
{ // 回送數據
perror("send");
exit(1);
}
}
else
{// 無法讀取數據,可能連接以斷
if(fd >= 0 && fd < 100)
printf("Client %s has left\n", inet_ntoa(scinf[fd].sin_addr));
memset((void *)(&scinf[client_fd]), 0, sin_size);
close(fd);
FD_CLR(fd, &inset);
}
}
}
}
}
close(sockfd); return 0;
}
復制代碼
sokit.zip
2019-6-30 22:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
3.9 MB, 下載次數: 4, 下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1