基於socket通訊的網路聊天室(linux)

2021-09-29 22:32:40 字數 3438 閱讀 2164

//客戶端

#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 基於檔案型別的套接字家...