//客戶端
#include "header.h"
// 客戶端接收訊息的執行緒函式
void* recv_func(void *args)
close(sock_fd);
exit(0);
}// 客戶端和服務端進行通訊的處理函式
void process(int sock_fd)
} close(sock_fd);
}int main(int argc, char *ar**)
*/ server.sin_family = af_inet;
// server.sin_addr = *((struct in_addr *)host->h_addr); // 用第乙個引數作為連線伺服器端的位址
server.sin_addr.s_addr = inet_addr(server_ip);
server.sin_port = htons(port);
int sc = socket(af_inet, sock_stream, 0);
if(sc < 0)
int err = connect(sc, (struct sockaddr*)&server, sizeof(server));
if(err < 0)
process(sc);
close(sc);
return 0;
}
標頭檔案:
#ifndef _header_h
#define _header_h
#include //printf perror
#include //socket blind listen accept connect
#include //read and write
#include //size_t,time_t,pid_t等型別
#include //null exit
#include //sizeof
#include #include #include //assert
#define port 23456
#define server_ip "120.77.214.213"
#define buffer_size 1024
#define true 1
#endif
makefile:
objs = client.o
cc = gcc
cflags = -w
server : $(objs)
$(cc) $(objs) -o client -pthread
server.o : client.c header.h
$(cc) $(cflags) -c client.c -o client.o
make clean:
rm -rf *.o client
服務端:
#include //printf perror
#include //socket blind listen accept connect
#include //read and write
#include //time_t
#include //null
#include //sizeof
#include #include //hostnent
#include //phread
#include //time
#define port 23456
#define max_que_conn 5 //靠靠靠
#define max_mem 10 //靠靠靠
#define buffer_size 1024
#define name_size 20
#define true 1
void *quit(void *arg);
void *rcv_mes(void *arg);
int sockfd,client_fd[max_mem];
int main()
/*設定sockaddr_in 結構體中相關引數*/
server_sockaddr.sin_family = af_inet; //ipv4
server_sockaddr.sin_port = htons(port); //htons:主機位元組序(小)-> 網路位元組序(大)
server_sockaddr.sin_addr.s_addr = inaddr_any; //all ip can connect
memset(server_sockaddr.sin_zero,0,8); //填充0以保持與struct sockaddr同樣大小
/*bind sockfd*/
if (bind(sockfd, (struct sockaddr *)&server_sockaddr, sizeof(struct sockaddr)) == -1)
/*listen*/
if ( listen( sockfd, max_que_conn) == -1)
printf("listening........\n");
/*建立乙個執行緒,對伺服器程式進行管理(關閉)*/
pthread_t thread;
if ((pthread_create(&thread, null, quit, null)) != 0)
/*記錄空閒的套接字描述符(-1為空閒)*/
int i=0;
for(i=0; i0)
memset(buf,0,buffer_size);
strcpy(buf,name);
strcat(buf,"\twelcome:\0");
for(i=0;i0)
ticks=time(null);
sprintf(buf2,"%.24s\r\n",ctime(&ticks));
memset(buf, 0, buffer_size);
strcpy(buf,name);
strcat(buf,"\t");
strcat(buf,buf2);
strcat(buf,"\t");
strcat(buf,buf1);
for(i=0;imakefile:
objs = server.o
cc = gcc
cflags = -w
server : $(objs)
$(cc) $(objs) -o server -pthread
server.o : server.c
$(cc) $(cflags) -c server.c -o server.o
make clean:
rm -rf *.o server
Socket實現簡單的聊天通訊
最近學習了socket後,感覺socket挺好玩的,在部落格中看到socket在實時聊天功能的很強大,於是乎就做了乙個簡單的聊天功能,今天貼出來,能夠與大家一起共享,有不對之處,能夠給予指出,謝謝!伺服器中的 using system using system.collections.generic...
基於TCP的Socket通訊
在win32平台上的winsock程式設計都要經過下列步驟 定義變數 獲得windock版本 載入winsock庫 初始化 建立套接字 設定套接字選項 關閉套接字 解除安裝winsock庫 釋放資源 1 建立乙個socket,用函式socket int socket int domain,int t...
基於tcp的socket通訊
socekt是應用層與tcp ip協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,socket其實就是乙個門面模式,它 把複雜的tcp ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議 socket 基於檔案型別的套接字家...