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

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

?? i_net.c

?? 游戲類程序源代碼---WinDoom 3D源程序.zip
?? C
字號:
// Emacs style mode select   -*- C++ -*- 
//-----------------------------------------------------------------------------
//
// $Id:$
//
// Copyright (C) 1993-1996 by id Software, Inc.
//
// This source is available for distribution and/or modification
// only under the terms of the DOOM Source Code License as
// published by id Software. All rights reserved.
//
// The source is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
// for more details.
//
// $Log:$
//
// DESCRIPTION:
//
//-----------------------------------------------------------------------------

static const char
rcsid[] = "$Id: m_bbox.c,v 1.1 1997/02/03 22:45:10 b1 Exp $";

#include <stdlib.h>
#include <string.h>
#include <stdio.h>

//#include <sys/socket.h>
//#include <netinet/in.h>
//#include <arpa/inet.h>
#include <errno.h>
//#include <unistd.h>
//#include <netdb.h>
//#include <sys/ioctl.h>

#include "i_system.h"
#include "d_event.h"
#include "d_net.h"
#include "m_argv.h"

#include "doomstat.h"

#ifdef __GNUG__
#pragma implementation "i_net.h"
#endif
#include "i_net.h"





// For some odd reason...
#define ntohl(x) \
        ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \
                             (((unsigned long int)(x) & 0x0000ff00U) <<  8) | \
                             (((unsigned long int)(x) & 0x00ff0000U) >>  8) | \
                             (((unsigned long int)(x) & 0xff000000U) >> 24)))

#define ntohs(x) \
        ((unsigned short int)((((unsigned short int)(x) & 0x00ff) << 8) | \
                              (((unsigned short int)(x) & 0xff00) >> 8))) \
	  
#define htonl(x) ntohl(x)
#define htons(x) ntohs(x)

void	NetSend (void);
boolean NetListen (void);


char MsgText[2048];
void WriteDebug(char *);

//
// NETWORKING
//

// FIXME
#define IPPORT_USERRESERVED 26000

int	DOOMPORT =	(IPPORT_USERRESERVED +0x1d );

int			sendsocket;
int			insocket;

struct	sockaddr_in	sendaddress[MAXNETNODES];

void	(*netget) (void);
void	(*netsend) (void);

//
// UDPsocket
//
int UDPsocket (void)
   {
    int	s;
	
    // allocate a socket
    s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s < 0)
       {
        sprintf(MsgText, "ERROR:Can't create socket:%08X %s\n", errno, strerror(errno));
        I_Error(MsgText);
       }
		
    return s;
   }

//
// BindToLocalPort
//
void BindToLocalPort( int s, int port )
   {
    int			v;
    struct sockaddr_in	address;
	
    memset (&address, 0, sizeof(address));
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = INADDR_ANY;
    address.sin_port = port;

    v = bind(s, (void *)&address, sizeof(address));
    if (v == -1)
        I_Error ("BindToPort: bind: %s", strerror(errno));
   }


//
// PacketSend
//
void PacketSend (void)
{
    int		c;
    doomdata_t	sw;
				
    // byte swap
    sw.checksum = htonl(netbuffer->checksum);
    sw.player = netbuffer->player;
    sw.retransmitfrom = netbuffer->retransmitfrom;
    sw.starttic = netbuffer->starttic;
    sw.numtics = netbuffer->numtics;
    for (c=0 ; c< netbuffer->numtics ; c++)
    {
	sw.cmds[c].forwardmove = netbuffer->cmds[c].forwardmove;
	sw.cmds[c].sidemove = netbuffer->cmds[c].sidemove;
	sw.cmds[c].angleturn = htons(netbuffer->cmds[c].angleturn);
	sw.cmds[c].consistancy = htons(netbuffer->cmds[c].consistancy);
	sw.cmds[c].chatchar = netbuffer->cmds[c].chatchar;
	sw.cmds[c].buttons = netbuffer->cmds[c].buttons;
    }
		
    //printf ("sending %i\n",gametic);		
    c = sendto (sendsocket , (const char far *)&sw, doomcom->datalength
		,0,(void *)&sendaddress[doomcom->remotenode]
		,sizeof(sendaddress[doomcom->remotenode]));
	
    //	if (c == -1)
    //		I_Error ("SendPacket error: %s",strerror(errno));
}


//
// PacketGet
//
void PacketGet (void)
{
    int			i;
    int			c;
    struct sockaddr_in	fromaddress;
    int			fromlen;
    doomdata_t		sw;
				
    fromlen = sizeof(fromaddress);
    c = recvfrom (insocket, (char far *)&sw, sizeof(sw),0,(struct sockaddr *)&fromaddress, &fromlen );
    if (c == SOCKET_ERROR )
       {
        c = WSAGetLastError();
	    if (c != WSAEWOULDBLOCK)
	        I_Error ("GetPacket: Network error.");
	    doomcom->remotenode = -1;		// no packet
        return;
       }

    {
	static int first=1;
	if (first)
       {
	    sprintf(MsgText,"len=%d:p=[0x%x 0x%x] \n", c, *(int*)&sw, *((int*)&sw+1));
        WriteDebug(MsgText);
       }
	first = 0;
    }

    // find remote node number
    for (i=0 ; i<doomcom->numnodes ; i++)
	if ( fromaddress.sin_addr.s_addr == sendaddress[i].sin_addr.s_addr )
	    break;

    if (i == doomcom->numnodes)
    {
	// packet is not from one of the players (new game broadcast)
	doomcom->remotenode = -1;		// no packet
	return;
    }
	
    doomcom->remotenode = i;			// good packet from a game player
    doomcom->datalength = c;
	
    // byte swap
    netbuffer->checksum = ntohl(sw.checksum);
    netbuffer->player = sw.player;
    netbuffer->retransmitfrom = sw.retransmitfrom;
    netbuffer->starttic = sw.starttic;
    netbuffer->numtics = sw.numtics;

    for (c=0 ; c< netbuffer->numtics ; c++)
    {
	netbuffer->cmds[c].forwardmove = sw.cmds[c].forwardmove;
	netbuffer->cmds[c].sidemove = sw.cmds[c].sidemove;
	netbuffer->cmds[c].angleturn = ntohs(sw.cmds[c].angleturn);
	netbuffer->cmds[c].consistancy = ntohs(sw.cmds[c].consistancy);
	netbuffer->cmds[c].chatchar = sw.cmds[c].chatchar;
	netbuffer->cmds[c].buttons = sw.cmds[c].buttons;
    }
}



int GetLocalAddress (void)
{
    char		hostname[1024];
    struct hostent*	hostentry;	// host information entry
    int			v;

    // get local address
    v = gethostname (hostname, sizeof(hostname));
    if (v == -1)
	I_Error ("GetLocalAddress : gethostname: errno %d",errno);
	
    hostentry = gethostbyname (hostname);
    if (!hostentry)
	I_Error ("GetLocalAddress : gethostbyname: couldn't get local host");
		
    return *(int *)hostentry->h_addr_list[0];
}


//
// I_InitNetwork
//
void I_InitNetwork (void)
   {
    boolean		trueval = true;
    int			i, err;
    int			p;
    struct hostent*	hostentry;	// host information entry
    WORD wVersionRequested;  
    WSADATA wsaData; 

    doomcom = malloc (sizeof (*doomcom) );
    memset (doomcom, 0, sizeof(*doomcom) );
    
    // set up for network
    i = M_CheckParm ("-dup");
    if (i && i< myargc-1)
       {
	    doomcom->ticdup = myargv[i+1][0]-'0';
	    if (doomcom->ticdup < 1)
            doomcom->ticdup = 1;
        if (doomcom->ticdup > 9)
            doomcom->ticdup = 9;
       }
    else
       doomcom-> ticdup = 1;
	
    if (M_CheckParm ("-extratic"))
       doomcom-> extratics = 1;
    else
       doomcom-> extratics = 0;
		
    p = M_CheckParm ("-port");
    if (p && p<myargc-1)
       {
        DOOMPORT = atoi (myargv[p+1]);
        //printf ("using alternate port %i\n",DOOMPORT);
        sprintf (MsgText, "using alternate port %i\n",DOOMPORT);
        WriteDebug(MsgText);
       }
    
    // parse network game options,
    //  -net <consoleplayer> <host> <host> ...
    i = M_CheckParm ("-net");
    if (!i)
       {
        // single player game
        netgame = false;
        doomcom->id = DOOMCOM_ID;
        doomcom->numplayers = doomcom->numnodes = 1;
        doomcom->deathmatch = false;
        doomcom->consoleplayer = 0;
        return;
       }

    wVersionRequested = MAKEWORD(2,2); 
    err = WSAStartup(wVersionRequested, &wsaData); 
 
    netsend = PacketSend;
    netget = PacketGet;
    netgame = true;

    // parse player number and host list
    doomcom->consoleplayer = myargv[i+1][0]-'1';
    sprintf(MsgText, "console player number : %d\n", doomcom->consoleplayer);
    WriteDebug(MsgText);

    doomcom->numnodes = 1;	// this node for sure
	
    i++;
    while (++i < myargc && myargv[i][0] != '-')
       {
	    sendaddress[doomcom->numnodes].sin_family = AF_INET;
	    sendaddress[doomcom->numnodes].sin_port = htons(DOOMPORT);
	    if (myargv[i][0] == '.')
	       {
            sprintf(MsgText, "Node number %d address %s\n", doomcom->numnodes, myargv[i]+1);
            WriteDebug(MsgText);
	        sendaddress[doomcom->numnodes].sin_addr.s_addr = inet_addr(myargv[i]+1);
	       }
        else
           {
            sprintf(MsgText, "Node number %d hostname %s\n", doomcom->numnodes, myargv[i]);
            WriteDebug(MsgText);
            hostentry = gethostbyname(myargv[i]);
            if (!hostentry)
                I_Error ("gethostbyname: couldn't find %s", myargv[i]);
            sendaddress[doomcom->numnodes].sin_addr.s_addr = *(int *)hostentry->h_addr_list[0];
           }
        doomcom->numnodes++;
       }
	
    sprintf(MsgText, "Total number of players : %d\n", (doomcom->numnodes-1));
    WriteDebug(MsgText);
    doomcom->id = DOOMCOM_ID;
    doomcom->numplayers = doomcom->numnodes;
    
// build message to receive
    insocket = UDPsocket();
    BindToLocalPort(insocket,htons(DOOMPORT));
    ioctlsocket(insocket, FIONBIO, &trueval);

    sendsocket = UDPsocket();
   }


void I_NetCmd (void)
{
    if (doomcom->command == CMD_SEND)
    {
	netsend ();
    }
    else if (doomcom->command == CMD_GET)
    {
	netget ();
    }
    else
	I_Error ("Bad net cmd: %i\n",doomcom->command);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产电影在线观看| 视频一区二区三区中文字幕| 91精品免费在线观看| 日本久久精品电影| 成人午夜在线视频| www.日韩av| 99精品视频在线免费观看| 91亚洲精品久久久蜜桃网站| heyzo一本久久综合| 欧美肥胖老妇做爰| 精品国内二区三区| 国产亚洲精久久久久久| 国产精品女人毛片| 国产精品毛片a∨一区二区三区| 天天影视网天天综合色在线播放| 日韩国产欧美三级| 国产激情一区二区三区桃花岛亚洲| 精久久久久久久久久久| 国产精品一区三区| 91麻豆swag| 久久久不卡网国产精品一区| 亚洲视频图片小说| 午夜国产精品影院在线观看| 91视频国产观看| 中文字幕精品一区二区精品绿巨人| 丝瓜av网站精品一区二区| 色噜噜狠狠一区二区三区果冻| 日本一区二区三区免费乱视频| 亚洲蜜桃精久久久久久久| 午夜不卡av免费| 日本高清不卡在线观看| 国产精品美女久久久久久久久| 久久99最新地址| av不卡在线观看| 国产三级精品三级| 国产精品18久久久久久久久| 日韩午夜精品视频| 亚洲卡通欧美制服中文| 久久99精品一区二区三区| 91精品国产一区二区三区 | 国产清纯美女被跳蛋高潮一区二区久久w | 狠狠色丁香婷婷综合| 国产调教视频一区| 色综合久久中文综合久久97| 国内国产精品久久| www一区二区| 亚洲一区二区三区国产| 狠狠色丁香婷婷综合久久片| 久久综合五月天婷婷伊人| 国产一区二区精品久久99| 欧美男女性生活在线直播观看| 国产视频一区二区三区在线观看| 国产精品1024| 亚洲人成精品久久久久| 在线观看日韩国产| 亚洲欧洲成人精品av97| 国产美女娇喘av呻吟久久| 国产日韩欧美综合在线| 成人美女视频在线观看18| 国产精品女主播在线观看| 在线一区二区视频| 久久精品国产网站| 中文字幕精品一区二区三区精品| 91麻豆国产精品久久| 丝袜美腿一区二区三区| 精品国产一区二区精华| jlzzjlzz欧美大全| 首页综合国产亚洲丝袜| 国产欧美日韩在线| 欧美日韩在线免费视频| 国产精品高清亚洲| av电影在线观看不卡| 亚洲高清中文字幕| 欧美在线短视频| 久久99精品国产麻豆不卡| 国产精品美女久久久久aⅴ国产馆| 在线视频国内自拍亚洲视频| 精品一区二区三区av| 国产日产欧美一区| 欧美亚洲另类激情小说| 亚洲午夜久久久久久久久电影网| 欧美日韩精品系列| 成人黄色免费短视频| 中文字幕不卡三区| 欧美另类videos死尸| 国产高清久久久| 亚洲成av人**亚洲成av**| 欧美高清www午色夜在线视频| 国产美女av一区二区三区| 亚洲婷婷国产精品电影人久久| 欧美一区二区在线视频| www.亚洲人| 美国十次综合导航| 久久久久久9999| 欧美日韩中文字幕一区二区| 国模冰冰炮一区二区| 亚洲成av人片在www色猫咪| 国产日韩精品一区二区三区在线| 欧美日韩一区二区三区四区| 成人h动漫精品一区二区| 老色鬼精品视频在线观看播放| 一区二区三区影院| 欧美日韩激情一区| www.欧美色图| 成人精品免费视频| 国产乱子伦一区二区三区国色天香 | 欧美sm极限捆绑bd| 国模大尺度一区二区三区| 亚洲制服欧美中文字幕中文字幕| 国产欧美日韩麻豆91| 欧美一区二区三区视频在线观看 | 在线观看av不卡| 不卡av免费在线观看| 国产成人综合亚洲网站| 国产做a爰片久久毛片| 性久久久久久久| 亚洲午夜久久久久| 天天av天天翘天天综合网| 亚洲自拍偷拍网站| 亚洲成人免费电影| 亚洲电影在线播放| 日本亚洲免费观看| 久久不见久久见中文字幕免费| 久久激情综合网| 黄网站免费久久| 国产成人av一区二区三区在线 | 亚洲福利一二三区| 亚洲第一激情av| 日韩电影在线一区二区三区| 奇米在线7777在线精品| 久久久一区二区三区捆绑**| 国产亚洲精品福利| 一色桃子久久精品亚洲| 成人欧美一区二区三区黑人麻豆 | 成人性生交大片免费看在线播放 | 国产精品自拍一区| av在线不卡免费看| 欧美在线免费播放| 欧美一区二区在线视频| 久久久久久免费毛片精品| 国产精品久久久一本精品 | 欧美唯美清纯偷拍| 91精品国产综合久久久蜜臀图片| 日韩一区二区三区四区五区六区| 精品国内二区三区| 亚洲婷婷综合色高清在线| 婷婷一区二区三区| 国产精品一线二线三线| 97se亚洲国产综合自在线 | 久久综合中文字幕| 亚洲另类春色校园小说| 麻豆国产91在线播放| 不卡av电影在线播放| 欧美男同性恋视频网站| 欧美激情在线免费观看| 亚洲国产wwwccc36天堂| 国产成人自拍网| 欧美人狂配大交3d怪物一区| 久久午夜电影网| 亚洲成a人v欧美综合天堂下载| 国产呦精品一区二区三区网站| 色综合一个色综合亚洲| 91网址在线看| 欧美一区二区三区四区高清| 中文字幕在线一区| 裸体在线国模精品偷拍| 97精品久久久久中文字幕| 日韩一二三四区| 亚洲永久精品大片| 国产91色综合久久免费分享| 99视频一区二区| 日韩一区二区精品| 一区二区三区四区不卡在线 | 亚洲综合av网| 波多野结衣中文字幕一区| 日韩午夜激情免费电影| 夜夜嗨av一区二区三区网页| 国产福利一区二区三区在线视频| 欧美顶级少妇做爰| 一区二区国产盗摄色噜噜| 成人app网站| 久久九九影视网| 久久精品国产秦先生| 欧美日韩亚州综合| 亚洲久草在线视频| 97久久超碰精品国产| 久久久精品国产免费观看同学| 日韩国产高清影视| 欧美日韩的一区二区| 一区二区三区精密机械公司| www.亚洲色图| 亚洲欧洲成人av每日更新| 国产高清精品久久久久| 国产日韩欧美制服另类| 国产一区二区三区在线观看免费视频| 91精品久久久久久久99蜜桃| 亚洲午夜精品在线| 欧美巨大另类极品videosbest | 欧美激情综合网| 国产精品99久久久久久有的能看|