直接利用Socket/TCP开发网络游戏服务器开发的demo,求一个。

【Socket网络通信】利用TCP/IP协议实现从服务端的文件中读取数据打印到客户端的控制台,服务端对客户端输入过来的数据做出响应 - 梦幻衣园 - ITeye博客
博客分类:
四 .用TCP/IP协议写一个服务器。要求
1. 客户端一连接上,则向客户端打印三句话
第一句话:欢迎****(***是客户端的主机的名字),连接****(***服务器端主机的名字)的服务器
第二句话:您的ip为 *******
第三句话:继续操作请输入 Y,退出请输入“quit”(输入quit则服务结束)
2. 如果客户端继续操作输入的是y, 则服务器端返回:
1.查看dota英雄简介则按1
(然后读取硬盘上的 “dota英雄简介.txt”文件,并在控制台上显示)
2. 查看dota秘籍请按2
(然后读取硬盘上的 “dota秘籍.txt”文件,并在控制台上显示)
3.不管何时一旦客户端输入了quit,要求退出系统。
这题只需要你们把服务器写出来,然后在cmd下用telnet命令测试成功就行。
下面的是YangKai同学做的,用到了双向通信、内部类,客户端也写出来了,做的很不错,我把有些地方稍微改了(取消了内部类)下贴出来供大家参考。
import java.io.BufferedR
import java.io.FileNotFoundE
import java.io.FileR
import java.io.IOE
import java.io.InputStreamR
import java.io.PrintS
import java.net.ServerS
import java.net.S
public class ServerCopy {
private final int PORT = 8888;
public void start() {
ServerSocket ss = new ServerSocket(PORT);
System.out.println("服务器启动···");
Socket socket =
while ((socket = ss.accept())!=null) {
ClientWatcher cw = new ClientWatcher(socket);
cw.start();
} catch (IOException e) {
e.printStackTrace();
public static void main(String[] args) {
new ServerCopy().start();
class ClientWatcher extends Thread{
private BufferedReader netBr;
private PrintStream netPs;
public ClientWatcher(Socket socket) {
this.socket =
netBr = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
netPs = new PrintStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
//输出提示方法
public void print(){
netPs.println("1.查看dota英雄简介请按1");
netPs.println("2.查看dota英雄秘籍请按2");
netPs.println("3.返回上级菜单请按3");
netPs.println("4.退出请输入quit");
public void run() {
String clientName = socket.getInetAddress().getHostName();
String clientIp = socket.getInetAddress().getHostAddress();
netPs.println("欢迎" + clientName + "来到的dota资料服务器");
netPs.println("您的地址是" + clientIp);
netPs.println("继续操作请按y,退出请按quit");
String line =
while ((line = netBr.readLine())!= null) {
System.out.println("客户端:"+line);
if ("Y".equalsIgnoreCase(line)) {
netPs.println("1.查看dota英雄简介则按1");
netPs.println("2.查看dota英雄秘籍则按2");
netPs.println("3.退出请按quit");
while ((line = netBr.readLine())!= null) {
System.out.println("客户端:"+line);
if ("1".equalsIgnoreCase(line)) {
String txt = readFile("e:/peixun/test/dota英雄简介.txt");
System.out.println("读取英雄简介:"+txt);
netPs.println(txt);
//输出提示
} else if ("2".equalsIgnoreCase(line)) {
String txt = readFile("e:/peixun/test/dota秘籍.txt");
System.out.println("读取英雄秘籍:"+txt);
netPs.println(txt);
//输出提示
} else if ("3".equalsIgnoreCase(line)){
netPs.println("继续操作请按y,退出请按quit");
} else if("quit".equalsIgnoreCase(line)){
System.out.println("与客户端"+clientName+"断开链接!");
netPs.println("你输入信息错误!");
//输出提示
} else if ("quit".equalsIgnoreCase(line)) {
System.out.println("与客户端"+clientName+"断开链接!");
netPs.println("你输入信息错误!继续操作请按y,退出请按quit");
netPs.println("");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
netBr.close();
netPs.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
private String readFile(String fileName) {
StringBuffer sb = new StringBuffer();
BufferedReader br = new BufferedReader(new FileReader(fileName));
String line = "";
while ((line = br.readLine()) != null) {
sb.append(line);
sb.append("\r\n");
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
return sb.toString();
import java.io.BufferedR
import java.io.FileNotFoundE
import java.io.IOE
import java.io.InputStreamR
import java.io.PrintS
import java.net.S
import java.net.UnknownHostE
import java.util.S
public class ClientCopy {
private final String SERVCE_ADDRESS = "localhost";
private final int PORT = 8888;
public void start() {
Socket socket = new Socket(SERVCE_ADDRESS, PORT);
String line =
Scanner scan = new Scanner(System.in);
PrintStream netPs = new PrintStream(socket.getOutputStream());
new Watcher(socket).start();
while ((line = scan.nextLine())!=null) {
netPs.println(line);
if("quit".equals(line)) {
System.out.println("与服务器断开连接!");
netPs.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
public static void main(String[] args) {
new ClientCopy().start();
class Watcher extends Thread {
private BufferedReader netBr;
public Watcher(Socket socket) {
this.socket =
netBr = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
this.setDaemon(true);
public void run() {
while ((line = netBr.readLine()) != null) {
System.out.println(line);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
netBr.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
浏览: 63728 次
来自: 嘉兴
同事面试遇到这个题目了
lingyun304 写道s1!=s2处理完后,要给s1赋值s ...
s1!=s2处理完后,要给s1赋值s2,即s1=s2;
这个方法在火狐浏览器不起作用呢,不过在IE是可以的,哈哈。
面试遇见几次,但从没记过,这次载大了,过来学习学习。答案很精辟 ...13Socket编程利用TCP协议的实验报告
上亿文档资料,等你来发现
13Socket编程利用TCP协议的实验报告
Socket编程报告(TCP/IP协议);一.实验目的;通过C++来实现TCP/IP协议下的Socket;二.实验原理;客户端建立Socket,通过端口号和地址确定目标;服务端建立Socket,声明自身的端口号和地址并;三.实验代码(C++实现);服务器端代码如下:;#pragmaonce;#include&stdio.h&;#include&l
Socket编程报告(TCP/IP协议)
一.实验目的
通过C++来实现TCP/IP协议下的Socket编程,掌握TCP协议的算法实现。
二.实验原理
客户端 建立Socket,通过端口号和地址确定目标服务器,使用Connect连接到服务器,send发送消息,等待处理,通信完成后调用CloseSocket关闭Socket
服务端 建立Socket,声明自身的端口号和地址并绑定到Socket,使用Listen打开监听,然后不断用Accept去查看是否有连接,如果有,捕获Socket,并通过Recv获取消息的内容,通信完成后调用CloseSocket关闭这个对应Accept到的Socket,如果不再需要等待任何客户端连接,那么用CloseSocket关闭掉自身的Socket
三.实验代码(C++实现)
服务器端代码如下:
#pragma once
#include &stdio.h&
#include &winsock.h&
#pragma comment (lib,&ws2_32.lib&)
class CServerNet
//初始化服务器,返回0表示成功
int Init(const char* address,int port);
//更新数据
void Run();
int CServerNet::Init( const char* address,int port )
int rlt = 0; SOCKET m_
//用于记录错误信息,并输出
int iErrorM
//初始化WinSock
if (iErrorMsg != NO_ERROR) { WSAData wsaD iErrorMsg = WSAStartup(MAKEWORD(1,1),&wsaData);
printf(&wsastartup failed with error : %d\n&,iErrorMsg);
//创建服务端Socket m_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (m_sock == INVALID_SOCKET)
//创建Socket异常 printf(&socket failed with error : %d\n&,WSAGetLastError());
//绑定 iErrorMsg = bind(m_sock,(sockaddr*)&serverAddr,sizeof(serverAddr)); if (iErrorMsg & 0) {
} //绑定失败 printf(&bind failed with error : %d\n&,iErrorMsg); rlt = 3; //声明信息 sockaddr_in serverA serverAddr.sin_family = AF_INET; serverAddr.sin_port = serverAddr.sin_addr.s_addr = inet_addr(address);
void CServerNet::Run()
sockaddr_in tcpA int len = sizeof(sockaddr); SOCKET newS char buf[1024]; //公开连接 listen(m_sock,5);
//接收信息 newSocket = accept(m_sock,(sockaddr*)&tcpAddr,&len);
if (newSocket == INVALID_SOCKET)
//非可用socket
//新socket连接
printf(&new socket connect : %d\n&,newSocket);
//消息处理
if (rval == 0)
} //关闭对应Accept的socket closesocket(newSocket);
}while(rval != 0);
//显示接收到的数据 printf(&recv %s\n&,buf); //recv返回0表示正常退出 printf(&ending connection&);
if (rval == SOCKET_ERROR)
//这应该是个异常,当客户端没有调用closeSocket就直接退出游戏的时候,将会进入这里 printf(&recv socket error\n&);
printf(&process\n&); //接收数据 memset(buf,0,sizeof(buf)); rval = recv(newSocket,buf,1024,0);
} while (1);
//关闭自身的Socket closesocket(m_sock);
int main(int argc, char **argv)
CServerNet serverN int iRlt = serverNet.Init(&127.0.0.1&,8888); if (iRlt == 0) {
printf(&init ok...\n&); serverNet.Run(); printf(&serverNet init failed with error : %d\n&,iRlt); system(&pause&);
客户端代码如下:
#pragma once
#include &stdio.h&
#include&windows.h&
#pragma comment(lib, &Ws2_32.lib&)
class CClientNet
int CClientNet::Connect( int port,const char* address ) {
//用于记录错误信息并输出 int iErrM //启动WinSock WSAData wsaD iErrMsg = WSAStartup(MAKEWORD(1,1),&wsaData); if (iErrMsg != NO_ERROR)
printf(&failed with wsaStartup error : %d\n&,iErrMsg); //有错误 int rlt = 0; SOCKET m_ //连接上指定服务器 int Connect(int port,const char* address); //发送信息 int SendMsg(const char* msg,int len); //关闭 void Close();
三亿文库包含各类专业文献、中学教育、外语学习资料、幼儿教育、小学教育、应用写作文书、专业论文、文学作品欣赏、13Socket编程利用TCP协议的实验报告等内容。 
 实验报告实验一 Socket 编程一、实验目的通过 socket 程序的编写、调试,掌握 ...二、实验内容①学习 socket 编程使用的类和接口,着重掌握基于 TCP 协议的 ...  实验七:使用 TCP 协议的 Socket 网络程序设计实验目的:掌握 Socket 通讯机制,掌握 Socket 和 ServerSocket 类和相关方法。 实验要求:通过 Socket 编程,掌握网络应用...  (实验一)基于TCP的socket编程_计算机软件及应用_IT/计算机_专业资料。实验一 ...©2015 Baidu 使用百度前必读 | 文库协议 | 网站地图 关闭
你想要的文库都...  UDP及TCP通信程序的设计与实现实验报告_计算机软件及应用_IT/计算机_专业资料。...(); //创建socket,第一个参数表示用IP协议,第二个参数表示用TCP传输,第三个...  实验二:基于TCPUDP的Socket编程_计算机硬件及网络_IT/计算机_专业资料。a)利用Java或C++语言,分别基于TCP和UDP编写一个简单的Client/Server网络应用程序。要求实现...  《计算机网络》实验报告实验序号: 7 实验项目名称:TCP/IP Socket 编程 学 号...设计通信协议,使得任意一个客户端都能通过服务 端与另外任意一个联网客户端进行...  实验三 基于 TCP 协议的 Socket 编程 实验目的 1、 掌握基于 TCP 协议的 Socket 概念 2、 学习编写基于 TCP 协议的 Socket 程序 实验内容 1.编写一个 Client...  Socket.close(); } } 三、 实验分析: TCP 提供可靠的数据传输,而 UDP 提供不可靠的运输服务,在套接字编程方面,UDP 客户机使用的是 DatagramSocket,而 TCP ...  的网络文件传输实验报告一、 实验目的 1、 熟悉 TCP/IP 协议的功能和网络操作 2、 编写小型的 socket 应用程序,初步了解 windows 环境下使用 sockets 编程,实现...鏌ョ湅: 25229|鍥炲?: 5
UID锛}

我要回帖

更多关于 网络游戏服务器开发 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信