亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? chatserver.c

?? 實現多線程聊天室
?? C
字號:
// 我真誠地保證:
    
// 由于技術加時間的原因,我雖然沒有完全獨立的把整個程序設計出來,但是通過參考上課筆記和
// 同學的源程序我已經把整個程序的流程和細節都搞清楚,并且最終完成了整個程序。
// 如果在上述過程中,我遇到了什么困難而求教于人,那么,我將在程序實習報告中
// 詳細地列舉我所遇到的問題,以及別人給我的提示。

// 在此,我感謝吳仁海,鮑承會同學對我的啟發和幫助。下面的報告中,我還會具體地提到
// 他們在各個方法對我的幫助。
 
// 我的程序里中凡是引用到其他程序或文檔之處,
// 例如教材、課堂筆記、網上的源代碼以及其他參考書上的代碼段,
// 我都已經在程序的注釋里很清楚地注明了引用的出處。

// 我從未沒抄襲過別人的程序,也沒有盜用別人的程序,
// 不管是修改式的抄襲還是原封不動的抄襲。

// 我編寫這個程序,從來沒有想過要去破壞或妨礙其他計算機系統的正常運轉。
    
// 陳友元(01011105)
//文件名稱:chatserver.c
//項目名稱:多線程聊天室
//創建者:陳友元(01011105)
//創建時間:2004-5-31
//最后修改時間:2004-6-3
//功能: 接受客戶端發來的信息
//文件中的函數名稱和簡單功能描述:
//文件中定義的全局變量和簡單功能描述:
//文件中用到的他處定義的全局變量及其出處:
//與其他文件的依賴關系:sock_common.h定義了錯誤信息



/*以下程序為服務器端程序,通過使用多線程(該程序設置為最多5個線程)
來連接客戶端套接字,從而接受客戶端發來的信息,并把信息發送給其他的用戶*/
#include "sock_common.h"
#include <conio.h>
#include <process.h>
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libcmt.lib")
#define BUFFER_SIZE    500//定義緩沖區大小為500
unsigned __stdcall ProcessThread(void *  p);
unsigned long hThreadHandle;
unsigned uThreadID;
static SOCKET chatsock[5];//定義大小為五的套接字樹組用來保存連接到服務器上的客戶端套接字,每一個套接字對應一個聊天室的人。
static char chatip[5][20];//定義5*20的二維數組,用來保存參加聊天的客戶端IP
static int chatcount = 0;//初始聊天人數為0,該變量也用來標室聊天者
int do_something_with(SOCKET NewConnection);
void main(int argc, char *argv[])
{
	WSADATA              wsaData;
	SOCKET               ListeningSocket;//監聽套接字
	SOCKET               NewConnection;//申請連接的套接字
	SOCKADDR_IN          ServerAddr;//服務器地址
	SOCKADDR_IN          ClientAddr;//客戶機地址
	int                  ClientAddrLen;//客戶機地址長度
	u_short              Port = 5150;//默認斷口號為5150
	int                  Ret;//函數調用時返回值
	/*****參考上課筆記********/
	//初試化低層的Windous Socket DLL
	if ((Ret = WSAStartup(MAKEWORD(2,2), &wsaData)) != 0)
	{
		printf("WSAStartup failed with error %d\n", Ret);
		return;
	}
    //創建新的socket以監聽客戶端的連接
	if ((ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) == INVALID_SOCKET)
	{
		sockerror("Create socket failed! ");
		WSACleanup();
		return;
	} 
	ServerAddr.sin_family = AF_INET;/*ADDRESS FAMILY*/
	ServerAddr.sin_port = htons(Port);/*PORT NUMBER*/    
	ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);/*INTERNET ADDRESS*/
	//把socket和機器上的特定端口連接起來
	if (bind(ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR)
	{
		sockerror("Bind failed! ");
		closesocket(ListeningSocket);
		WSACleanup();
		return;
	}
	//為申請進入的連接建立一個后備日志,然后就可用accept()接受連接了,5為等待連接的最大長度
	if (listen(ListeningSocket, 5) == SOCKET_ERROR)
	{
		sockerror("Liten failed! ");
		closesocket(ListeningSocket);
		WSACleanup();
		return;
	} 
	while(!kbhit())
	{
		//接受新的連接
		ClientAddrLen = sizeof (ClientAddr);
		if ((NewConnection = accept(ListeningSocket, (SOCKADDR *) &ClientAddr,&ClientAddrLen)) == INVALID_SOCKET)
		{
			sockerror("Accept socket failed! ");
			closesocket(ListeningSocket);
			WSACleanup();
			return;
		}
		
		if(chatcount < 5){
			chatsock[chatcount] = NewConnection;//將新接收的客戶端套接字保存入服務器端的套接字數組
			strcpy(chatip[chatcount], inet_ntoa(ClientAddr.sin_addr));//將客戶端的numbers-and-dots
		                                                              //格式的IP地址轉換成unsigned long
			                                                          //并保存
			chatcount++;//聊天人數加一
		}
		else{
			printf("Cant chat ,too many people\n");//如果聊天數已經超過5則不予操作,并提示信息
		}
		//創建并初始化一個線程,該線程和新接收socket連接
		hThreadHandle = _beginthreadex(NULL,0,ProcessThread,(void *)&NewConnection,0,&uThreadID);
		CloseHandle((HANDLE) hThreadHandle);
	}
	closesocket(ListeningSocket);//把套接字從擁有對象參考表中取消
	WSACleanup();//從底層的Windows Sockets DLL中撤消注冊
}
unsigned __stdcall ProcessThread(void *  p)//多線程調用
{
	SOCKET connection = *((SOCKET *) p);
	do_something_with(connection);//對該套接字進行操作
	closesocket(connection);
	return 0;
}
int do_something_with(SOCKET NewConnection)
{
	SOCKADDR_IN    ClientIp;//客戶機地址
	char pBuffer[BUFFER_SIZE];
	char infomation[BUFFER_SIZE];
	char* ipname;//客戶端名稱指針
	int len = sizeof(ClientIp), infolen;
	int Ret;//返回值
	int i;//給其他客戶機發送信息時的循環變量
	while(1)
	{
		Ret = recv(NewConnection,pBuffer,BUFFER_SIZE,0);
		if (Ret <= 0)
			return Ret;//如果接收失敗則退出
		getpeername(NewConnection, &ClientIp, &len);//從客戶端套接字中獲得IP
		ipname = inet_ntoa(ClientIp.sin_addr);//將客戶端的numbers-and-dots
		                                      //格式的IP地址轉換成unsigned long
			                                  //并把指針賦給ipname
		sprintf(infomation, "\nmessage from  <%s> :\n",ipname);//提示信息來自哪個客戶端
		infolen = strlen(infomation);
		//在服務器上顯示聊天信息
		printf(infomation);//客戶機名
		pBuffer[Ret] = '\0';
		printf(pBuffer);//聊天記錄
		printf("\n-------------------------------------\n");
		//向其他客戶機發送聊天記錄,如果是當前說話者的socket則不發送
		for(i = 0; i < chatcount; i++){
			if(chatsock[i] != NewConnection){
				infolen = send(chatsock[i], infomation, infolen, 0);//發送說話客戶機名
				Ret = send(chatsock[i], pBuffer, Ret, 0);//發送說話內容
			}
		}
	}
	return 1;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一片黄亚洲嫩模| 欧洲亚洲精品在线| 欧美自拍偷拍一区| 久久久久九九视频| 天天免费综合色| 日本韩国一区二区| 国产精品成人在线观看| 国产一区二区三区在线观看精品| 色哟哟一区二区三区| 国产三级精品视频| 狠狠色狠狠色综合日日91app| 欧美日韩黄色一区二区| 亚洲女厕所小便bbb| 欧洲精品在线观看| 国产视频一区在线播放| 久久精品国产精品青草| 欧美一区二区三区影视| 亚洲成在人线免费| 欧美在线|欧美| 夜夜嗨av一区二区三区网页 | 国产精品午夜久久| 国模大尺度一区二区三区| 欧美一区二区三区四区五区| 亚洲国产日韩a在线播放性色| 91影院在线观看| 中文字幕色av一区二区三区| 成人黄色在线视频| 国产欧美一区二区三区在线看蜜臀| 精一区二区三区| 日韩欧美另类在线| 毛片av一区二区| 精品三级在线看| 久久99热这里只有精品| 久久一留热品黄| 国产91丝袜在线观看| 亚洲国产精品成人久久综合一区| 成人免费黄色大片| 亚洲婷婷在线视频| 精品视频一区 二区 三区| 亚洲国产精品天堂| 日韩免费观看高清完整版 | 久久久久久免费| 成人一区二区三区在线观看| 欧美激情一区二区在线| 成人精品一区二区三区中文字幕| 亚洲天堂2014| 欧美日韩不卡在线| 国产在线精品一区二区不卡了| 国产亚洲一二三区| 色综合久久88色综合天天6 | 风间由美一区二区av101| 国产精品人成在线观看免费| 色94色欧美sute亚洲线路一久 | youjizz国产精品| 亚洲色图清纯唯美| 欧美一区二区三区免费在线看 | 国产精品欧美一级免费| 欧洲色大大久久| 韩国v欧美v日本v亚洲v| 日韩伦理免费电影| 日韩亚洲欧美中文三级| 成人在线视频一区二区| 亚洲成人av在线电影| 久久女同互慰一区二区三区| 欧美伊人精品成人久久综合97| 乱一区二区av| 一区二区三区在线免费播放| 欧美成人午夜电影| 色菇凉天天综合网| 国产精品18久久久久久vr| 亚洲观看高清完整版在线观看| 一区二区三区欧美| 日韩天堂在线观看| 色狠狠桃花综合| 国产成人综合精品三级| 亚洲成a人片综合在线| 国产拍揄自揄精品视频麻豆| 6080国产精品一区二区| 99这里只有久久精品视频| 日本中文字幕一区二区视频| 亚洲视频在线观看一区| 精品国产百合女同互慰| 欧美日韩一区二区电影| www.日韩精品| 成人综合在线观看| 久久精品国产99| 婷婷综合五月天| 亚洲精品v日韩精品| 久久精品视频一区二区三区| 91精品国产手机| 欧美在线不卡视频| 色综合久久久久| 成人av在线资源| 成人午夜激情影院| 高清不卡一二三区| 国产精品资源网站| 国产精品一线二线三线精华| 免费观看一级欧美片| 亚洲高清不卡在线观看| 夜夜嗨av一区二区三区| 亚洲同性同志一二三专区| 国产精品乱码人人做人人爱 | 成人网在线免费视频| 韩日欧美一区二区三区| 久久国产免费看| 蜜臀av一区二区在线免费观看| 亚洲mv大片欧洲mv大片精品| 一区二区国产视频| 亚洲精品一二三区| 一区二区三区在线不卡| 一区二区在线观看不卡| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品福利影院| 中文av字幕一区| 国产精品高潮呻吟| 亚洲视频精选在线| 亚洲精品va在线观看| 亚洲一区二区在线观看视频| 亚洲一区二区在线播放相泽| 亚洲福利一二三区| 日韩国产成人精品| 久久精品国产免费| 国产精品系列在线播放| 成人一区二区三区视频在线观看| av中文字幕亚洲| 欧美亚洲国产bt| 日韩午夜在线播放| 久久久99精品久久| 亚洲色图丝袜美腿| 日韩—二三区免费观看av| 蜜臀av性久久久久av蜜臀妖精 | 麻豆精品国产传媒mv男同| 韩日av一区二区| 99精品欧美一区二区三区小说| 色视频一区二区| 51久久夜色精品国产麻豆| 精品国产免费久久 | 亚洲精品菠萝久久久久久久| 亚洲老妇xxxxxx| 日本亚洲三级在线| 丁香婷婷综合色啪| 欧美三级资源在线| 久久香蕉国产线看观看99| 亚洲欧美激情一区二区| 琪琪久久久久日韩精品| 成人综合婷婷国产精品久久蜜臀| 欧美丝袜丝交足nylons图片| 欧美v亚洲v综合ⅴ国产v| 中文字幕在线视频一区| 婷婷一区二区三区| 成人黄色一级视频| 欧美成人精精品一区二区频| 国产精品久久免费看| 日韩高清不卡在线| av在线播放成人| 日韩午夜电影在线观看| 亚洲精品综合在线| 久久成人18免费观看| 一本大道久久a久久综合| 日韩精品一区二区在线| 亚洲一区二区三区四区不卡| 精品在线亚洲视频| 欧美体内she精高潮| 国产情人综合久久777777| 日韩电影免费在线看| www.日韩在线| 久久九九99视频| 美女尤物国产一区| 欧美亚洲动漫制服丝袜| 亚洲日本va在线观看| 精东粉嫩av免费一区二区三区| 在线精品视频小说1| 中文欧美字幕免费| 国产传媒久久文化传媒| 欧美一区二区网站| 亚洲成人一二三| 欧美亚洲自拍偷拍| 亚洲免费在线电影| 成人a区在线观看| 日本一区二区三区四区在线视频| 久久精品国产一区二区三| 在线播放亚洲一区| 亚洲成人中文在线| 欧美日韩国产a| 亚洲第一会所有码转帖| 91久久精品一区二区二区| 中文字幕中文字幕中文字幕亚洲无线| 国产精品99久久不卡二区| 精品乱人伦一区二区三区| 久久福利资源站| 精品精品国产高清一毛片一天堂| 日本午夜精品视频在线观看| 欧美精品99久久久**| 日韩电影在线观看一区| 在线综合亚洲欧美在线视频| 丝袜美腿一区二区三区| 欧美一区二区三区在线看| 男女男精品网站| 久久久久久久久免费| 丰满岳乱妇一区二区三区|