`

网络编程

    博客分类:
  • J2ME
阅读更多
1、Socket编程
Socket是什么
Socket是套接字,基于TCP协议的传输支持Socket
开发流程:
  服务器监听某个端口
  客户端连接服务器的某个端口
  通过SocketConnection通信
服务器监听某个端口
  javax.microedition.io.ServerSocketConnection
  javax.microedition.io.Connector专门负责建立各种连接
    open(“socket://:端口”),返回ServerSocketConnection
  ServerSocketConnection可以获得服务器IP和端口
  如果有客户连上来,可以用ServerSocketConnection.acceptAndOpen()返回SocketConnection
客户端连接服务器端
  javax.microedition.io.Connector专门负责建立各种连接
    open(“socket://IP地址:端口”),返回SocketConnection
  SocketConnection重要方法:
    getAddress() :得到客户端地址
    setSocketOption: 设置一些参数,一般可以用默认
    openDataInputStream/ openInputStream:打开输入流
    openDataOutputStream/ openOutputStream:打开输出流
实例:客户端和服务器端连接,当客户端连上之后,能够和服务器端聊天.两端都有一个文本框输入聊天信息,点击“发送”,能够在另一端收取之后显示。注意,一切都是自动的,所以要用到多线程(单聊)
package example;

import java.io.DataInputStream;
import java.io.DataOutputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.ServerSocketConnection;
import javax.microedition.io.SocketConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class ChatServerMIDlet extends MIDlet implements CommandListener{
	
	private ServerSocketConnection ssc = null;
	private SocketConnection sc = null;
	private DataInputStream dis = null;
	private DataOutputStream dos = null;
	
	private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY);
	private Command cmdSend = new Command("发送",Command.SCREEN,1);	
	private Form frmChat = new Form("聊天界面");
	private Display display;
	
	protected void startApp() throws MIDletStateChangeException {
		display = Display.getDisplay(this);
		display.setCurrent(frmChat);
		frmChat.addCommand(cmdSend);
		frmChat.append(tfMsg);
		frmChat.setCommandListener(this);
		
		try{
			ssc = (ServerSocketConnection)Connector.open("socket://:9999");
			sc = (SocketConnection)ssc.acceptAndOpen();
			dis = sc.openDataInputStream();
			dos = sc.openDataOutputStream();
			new ReceiveThread().start();
		}catch(Exception ex){
			ex.printStackTrace();
		}
		
	}
	public void commandAction(Command c,Displayable d){
		if(c==cmdSend){
			try{
				dos.writeUTF(tfMsg.getString());
			}catch(Exception ex){}			
		}
	}
	class ReceiveThread extends Thread{
		public void run(){
			while(true){
				try{					
					String msg = dis.readUTF();
					frmChat.append(msg + "\n");
				}catch(Exception ex){ex.printStackTrace();}	
			}
		}
	}
	
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		// TODO Auto-generated method stub

	}

	protected void pauseApp() {
		// TODO Auto-generated method stub

	}
	

}

package example;

import java.io.DataInputStream;
import java.io.DataOutputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.SocketConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

import example.ChatServerMIDlet.ReceiveThread;

public class ChatClientMIDlet extends MIDlet implements CommandListener{
	
	private SocketConnection sc = null;
	private DataInputStream dis = null;
	private DataOutputStream dos = null;
	
	private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY);
	private Command cmdSend = new Command("发送",Command.SCREEN,1);	
	private Form frmChat = new Form("聊天界面");
	private Display display;
	protected void startApp() throws MIDletStateChangeException {
		display = Display.getDisplay(this);
		display.setCurrent(frmChat);
		frmChat.addCommand(cmdSend);
		frmChat.append(tfMsg);
		frmChat.setCommandListener(this);
		
		try{
			sc = (SocketConnection)Connector.open("socket://127.0.0.1:9999");
			dis = sc.openDataInputStream();
			dos = sc.openDataOutputStream();
			new ReceiveThread().start();
		}catch(Exception ex){
			ex.printStackTrace();
		}

	}
	public void commandAction(Command c,Displayable d){
		if(c==cmdSend){
			try{
				dos.writeUTF(tfMsg.getString());
			}catch(Exception ex){}			
		}
	}
	
	class ReceiveThread extends Thread{
		public void run(){
			while(true){
				try{
					String msg = dis.readUTF();
					frmChat.append(msg + "\n");
				}catch(Exception ex){}	
			}
		}
	}
	
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		// TODO Auto-generated method stub

	}

	protected void pauseApp() {
		// TODO Auto-generated method stub

	}


}

实例:聊天室开发
客户端和服务器端连接,当客户端连上之后,能够和服务器端聊天.两端都有一个文本框输入聊天信息,点击“发送”,能够在另一端收取之后显示。注意,一切都是自动的,所以要用到多线程,服务器运行,多个客户端都能够连接到服务器,当连上时,服务器送给客户端一条信息:欢迎您的到来,客户端能给服务器端发信息,信息显示在服务器端,显示为XXX说:????(多聊)
package example5;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.ServerSocketConnection;
import javax.microedition.io.SocketConnection;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class ChatServerMIDlet extends MIDlet implements Runnable{
	
	private ServerSocketConnection ssc = null;
	private SocketConnection sc = null;
	
	private Form frm = new Form("聊天纪录");
	private Display dis;
	
	private Vector v = new Vector();
	
	protected void startApp() throws MIDletStateChangeException {	
		dis = Display.getDisplay(this);
		dis.setCurrent(frm);
		try{
			ssc = (ServerSocketConnection)Connector.open("socket://:9999");
			new Thread(this).start();			
		}catch(Exception ex){
			ex.printStackTrace();
		}		
	}
	public void run(){
		while(true){//不断接受客户端连接
			try{
				sc = (SocketConnection)ssc.acceptAndOpen();				
				//开一个线程给这个客户端
				ChatThread ct = new ChatThread(sc);
				v.addElement(ct);//将线程添加进集合
				ct.start();
				
			}catch(Exception ex){
				ex.printStackTrace();
			}		
	}
	}
	class ChatThread extends Thread{
		private SocketConnection sc;
		private DataInputStream dis;
		private DataOutputStream dos;
		private String nickName;
		public ChatThread(SocketConnection sc){
			this.sc = sc;
			this.nickName = nickName;
			try{				
				dis = sc.openDataInputStream();
				dos = sc.openDataOutputStream();
				//读取昵称
				nickName = dis.readUTF();					
				frm.append(nickName);				
			}catch(Exception ex){
				ex.printStackTrace();
			}
		}		
		public void run(){//负责读取相应SocketConnection的信息
			while(true){
				try{
					String str = dis.readUTF();
					//将该信息发送给所有客户端
					//访问集合中的所有线程
					for(int i=0;i<v.size();i++){
						ChatThread ct = (ChatThread)v.elementAt(i);
						ct.dos.writeUTF(nickName + "说:" + str);
					}				
					
				}catch(Exception ex){
					ex.printStackTrace();
				}				
			}
		}
	}
	
	
	
	
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		// TODO Auto-generated method stub

	}

	protected void pauseApp() {
		

	}
	

}

package example5;

import java.io.DataInputStream;
import java.io.DataOutputStream;

import javax.microedition.io.Connector;
import javax.microedition.io.SocketConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class ChatClientMIDlet extends MIDlet implements CommandListener{
	
	private SocketConnection sc = null;
	private DataInputStream dis = null;
	private DataOutputStream dos = null;
	
	private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY);
	private Command cmdSend = new Command("发送",Command.SCREEN,1);	
	private Form frmChat = new Form("聊天界面");
	private Display display;
	
	private TextField tfNickName = new TextField("输入昵称","",10,TextField.ANY);
	private Command cmdLogin = new Command("登陆到服务器",Command.SCREEN,1);
	
	protected void startApp() throws MIDletStateChangeException {
		display = Display.getDisplay(this);
		display.setCurrent(frmChat);
		frmChat.addCommand(cmdLogin);
		frmChat.append(tfNickName);
		frmChat.setCommandListener(this);	

	}
	public void commandAction(Command c,Displayable d){
		if(c==cmdSend){
			try{
				dos.writeUTF(tfMsg.getString());
			}catch(Exception ex){}			
		}
		else if(c==cmdLogin){
			try{				
				frmChat.removeCommand(cmdLogin);
				frmChat.addCommand(cmdSend);				
				frmChat.append(tfMsg);//添加发送聊天信息的文本框
				new ChatThread().start();
			}catch(Exception ex){
				ex.printStackTrace();
			}
		}
	}

	class ChatThread extends Thread{
		public void run(){
			try{
				sc = (SocketConnection)Connector.open("socket://127.0.0.1:9999");
				dis = sc.openDataInputStream();
				dos = sc.openDataOutputStream();
				dos.writeUTF(tfNickName.getString());//发送昵称
				this.start();
			}catch(Exception ex){
				ex.printStackTrace();
			}			
			while(true){
				try{
					String msg = dis.readUTF();
					frmChat.append(msg + "\n");
				}catch(Exception ex){}	
			}
			
		}
	}
	
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		// TODO Auto-generated method stub

	}

	protected void pauseApp() {
		// TODO Auto-generated method stub

	}


}

2、UDP编程
UDP是什么
UDP是数据报,只负责传输信息,并不能保证信息一定会被收到,TCP基于连接,UDP基于报文,具体大家可以参考计算机网络
开发流程:
  服务器监听某个端口
  客户端连接服务器的某个端口
  通过Datagram通信
服务器监听某个端口
  javax.microedition.io. UDPDatagramConnection
  javax.microedition.io.Connector专门负责建立各种连接
  open(“datagram://:端口”),返回UDPDatagramConnection
  UDPDatagramConnection可以获得服务器IP和端口
客户端连接服务器端
  javax.microedition.io.Connector专门负责建立各种连接
    open(“datagram://IP地址:端口”),返回UDPDatagramConnection
  UDPDatagramConnection重要方法:
    newDatagram()
    receive()
    send()

实例:
客户端和服务器端连接,当客户端连上之后,能够和服务器端聊天.两端都有一个文本框输入聊天信息,点击“发送”,能够在另一端收取之后显示。注意,一切都是自动的,所以要用到多线程
package example;

import java.util.Vector;

import javax.microedition.io.Connector;
import javax.microedition.io.Datagram;
import javax.microedition.io.UDPDatagramConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class ChatServerMIDlet extends MIDlet implements CommandListener,Runnable{
	private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY);
	private Command cmdSend = new Command("发送",Command.SCREEN,1);	
	private Form frmChat = new Form("聊天界面");
	private Display display;
	
	private UDPDatagramConnection udc = null;
	private final int MAX = 255;
	private String address;
	
	protected void startApp() throws MIDletStateChangeException {
		display = Display.getDisplay(this);
		display.setCurrent(frmChat);
		frmChat.addCommand(cmdSend);
		frmChat.append(tfMsg);	
		frmChat.setCommandListener(this);
		try{
			udc = (UDPDatagramConnection)Connector.open("datagram://:9999");
			new Thread(this).start();
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}

	public void commandAction(Command c,Displayable d){
		if(c==cmdSend){//发送
			String msg = tfMsg.getString();
			try{
				Datagram dg = udc.newDatagram(msg.getBytes(), msg.getBytes().length);
				dg.setAddress(address);
				udc.send(dg);
			}catch(Exception ex){
				ex.printStackTrace();
			}		
			
		}
	}
	public void run(){
		while(true){
			try{
				Datagram dg = udc.newDatagram(MAX);
				udc.receive(dg);		
				address = dg.getAddress();
				String msg = new String(dg.getData(),0,dg.getLength());
				frmChat.append(msg + "\n");
			}catch(Exception ex){
				ex.printStackTrace();
			}
			
		}
	}
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		// TODO Auto-generated method stub

	}

	protected void pauseApp() {
		// TODO Auto-generated method stub

	}
	

}

package example;

import javax.microedition.io.Connector;
import javax.microedition.io.Datagram;
import javax.microedition.io.UDPDatagramConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class ChatClientMIDlet extends MIDlet implements CommandListener,Runnable{	
	private TextField tfMsg = new TextField("输入聊天信息","",255,TextField.ANY);
	private Command cmdSend = new Command("发送",Command.SCREEN,1);	
	private Form frmChat = new Form("聊天界面");
	private Display display;
	
	private UDPDatagramConnection udc = null;
	private final int MAX = 255;
	
	protected void startApp() throws MIDletStateChangeException {
		display = Display.getDisplay(this);
		display.setCurrent(frmChat);
		frmChat.addCommand(cmdSend);
		frmChat.append(tfMsg);
		frmChat.setCommandListener(this);
		try{
			udc = (UDPDatagramConnection)Connector.open("datagram://127.0.0.1:9999");
			new Thread(this).start();
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	public void commandAction(Command c,Displayable d){
		if(c==cmdSend){//发送
			String msg = tfMsg.getString();
			try{
				Datagram dg = udc.newDatagram(msg.getBytes(), msg.getBytes().length);
				udc.send(dg);
			}catch(Exception ex){
				ex.printStackTrace();
			}		
			
		}
	}
	
	public void run(){
		while(true){
			try{
				Datagram dg = udc.newDatagram(MAX);
				udc.receive(dg);
				String msg = new String(dg.getData(),0,dg.getLength());
				frmChat.append(msg + "\n");
			}catch(Exception ex){
				ex.printStackTrace();
			}
			
		}
	}
	
	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		// TODO Auto-generated method stub

	}

	protected void pauseApp() {
		// TODO Auto-generated method stub

	}


}

3、HTTP编程
HTTP是一种可以选用的方法
手机--》J2EE--》服务器--》Http响应--》手机
安装HTTP服务器
  安装Tomcat: http://www.apache.org
  绑定JDK
  测试
  重要目录:bin; conf;webapps/root;
  修改端口
  具体可以参见J2EE资料
连接到HTTP服务器
  javax.microedition.io.Connector专门负责建立各种连接
  open(“http://IP地址:端口”),返回HttpConnection
  HttpConnection重要方法:
  int getResponseCode()
  String getResponseMessage()
  String getHost() / int getPort() / String getProtocol() /String getURL()
  String getQuery()
  String getRequestMethod()
  void setRequestMethod(String method)
  openDataInputStream, openInputStream
  openDataOutputStream, openOutputStream
实例:
界面上有一个账号框,密码框,输入账号密码,由HTTP服务器进行验证,在数据库中查询看是否含有这个用户.
package com.cn;

import java.io.DataInputStream;
import java.io.IOException;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class HttpServer extends MIDlet implements CommandListener {
    private Display dis;
    private Form fr = new  Form("登录");
    private TextField tname = new TextField("账号:","",255,TextField.ANY);
    private TextField tpass = new TextField("密码:", "", 255, TextField.PASSWORD);
    private Command cmdSend = new Command("发送", Command.SCREEN, 0);
	public HttpServer() {
	}

	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

	}

	protected void pauseApp() {

	}

	protected void startApp() throws MIDletStateChangeException {
       dis = Display.getDisplay(this);
       dis.setCurrent(fr);
       fr.addCommand(cmdSend);
       fr.append(tname);
       fr.append(tpass);
       fr.setCommandListener(this);
	}

	public void commandAction(Command c, Displayable d) {
		if(c == cmdSend){
			new Thread(new Runnable() {		
				public void run() {
					try {
						HttpConnection hc = (HttpConnection) Connector.open("http://127.0.0.1/index.php?name="+
								tname.getString()+"&pass="+tpass.getString());
						     DataInputStream din = hc.openDataInputStream();
						     byte[] b =new byte[(int)hc.getLength()];
						     din.read(b);
						     fr.append(new String(b));
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}).start();
			
		}
	}
}

<?php
$name = $_GET['name'];
$pass = $_GET['pass'];
if($name == "ABC" && $pass ==123) {
  echo $name."登录成功!";
}else{
  echo $name."登录失败!";
}
?>
分享到:
评论

相关推荐

    Java网络编程第三版.pdf

    《Java网络编程第三版》是Java开发者深入理解网络编程的重要参考资料。这本书主要涵盖了Java平台上的网络应用程序开发,从基础概念到高级技术,为读者提供了一套全面的学习路径。以下是本书中涉及的一些关键知识点:...

    Windows网络编程.pdf

    Windows 网络编程 概述 Windows 网络编程是指在 Windows 操作系统平台上进行网络编程的技术,涉及到 Windows Socket、网络协议、网络应用程序的开发等方面。 Windows 网络编程的主要目的是实现高性能的网络应用...

    TCP IP网络编程

    扫描版 超清百度网盘资源!!! 为初学者准备的网络编程! 韩国TCP/IP经典教程!... 本书针对网络编程初学者,面向具备C语言基础的套接字网络编程学习者,适合所有希望学习Linux和Windows网络编程的人。

    C++网络编程文档

    C++网络编程是计算机科学中的一个重要领域,它允许开发者创建能够通过网络进行通信的应用程序。这份"C++网络编程文档"涵盖了这一主题的广泛内容,旨在帮助程序员深入理解并掌握网络编程的基本概念和技术。 首先,...

    c#网络编程实例教程源代码

    《C#网络编程实例教程源代码》是一份深入浅出的教学资源,旨在帮助开发者掌握C#语言在网络编程领域的应用。这份教程结合了理论与实践,提供了丰富的源代码示例,让学习者能够通过实际操作来理解和掌握网络编程的核心...

    Linux网络编程教程pdf完整版

    《Linux网络编程教程》这本书是Linux系统中进行网络编程的重要参考资料。它涵盖了广泛的知识点,旨在帮助读者理解和掌握如何在Linux环境下开发网络应用程序。以下是对这些主题的详细阐述: 1. **网络编程基础**:...

    java网络编程第四版pdf

    《Java网络编程(第四版)》是一本深入探讨Java在互联网环境下的编程技术的经典书籍。本书旨在帮助读者理解和掌握如何利用Java语言进行高效、安全的网络通信。书中内容覆盖了从基本的网络概念到复杂的多线程编程,是...

    c++网络编程实例.pdf

    C++ 网络编程实例 本文档提供了 C++ 网络编程的基础知识,涵盖了网络编程的概述、OSI 七层网络模型、TCP/IP 协议和 C/S 编程模型等内容。 网络编程概述 网络编程是指用户使用 MFC 类库在 VC 编译器中编写程序,以...

    Linux网络编程,包括tcp/upd,select/poll/epoll/pdf

    linux网络编程 pdf # Linux网络编程基础 Linux网络编程是指在Linux操作系统上开发网络应用程序的过程。它主要涉及到TCP/UDP协议以及select/poll/epoll等多路复用技术。 TCP/UDP协议是网络通信的基础,其中TCP协议...

    Java网络编程(第4版)PDF

    《Java网络编程(第4版)》是一本深入探讨Java平台上的网络编程技术的专业书籍,适合想要提升Java通讯技术的学者阅读。此书全面覆盖了Java网络编程的基础和高级概念,帮助开发者理解如何利用Java语言构建高效、可靠的...

    Java网络编程实验报告.pdf

    "Java网络编程实验报告" 本实验报告主要介绍了Java网络编程的基本概念和实现方法,通过设计和实现一个简单的客户端/服务器应用程序,了解Java网络编程的基本原理和实现方法。 知识点1:Java 网络编程基础 Java ...

    Java网络编程案例教程习题参考答案 .pdf

    Java网络编程案例教程习题参考答案 Java_network_programming是Java编程语言中一个基础组件,用于实现网络通信。以下是Java网络编程案例教程习题参考答案中涉及到的知识点: 1. Socket编程:Socket是Java网络编程...

    unix网络编程三卷合一中文版

    《Unix网络编程》是一套由美国著名计算机科学家W. Richard Stevens撰写的经典教材,涵盖了Unix系统下的网络编程各个方面。这套书共分为三卷,每卷都深入探讨了其主题,对于理解和掌握网络编程技术具有极高的参考价值...

    UNIX网络编程第1卷(1-19章)

    《UNIX网络编程》第一卷主要涵盖了网络编程的基本概念、传输层协议TCP和UDP的细节、套接口编程的原理与应用,以及高级网络编程技术。该书是网络编程领域的经典之作,作者是著名的网络编程专家W. Richard Stevens。...

    Visual C++网络编程案例实战.pdf

    《Visual C++网络编程案例实战》一书深入探讨了如何利用Visual C++及MFC类库进行网络编程,尤其强调了Windows Socket的应用。本书不仅覆盖了理论基础,还提供了丰富的实践案例,帮助读者掌握网络编程的核心技能。 #...

    IT公司笔试\linux c网络网络编程面试题收集

    Linux C 网络编程面试题收集 本文总结了 Linux C 网络编程面试题,涵盖了基础知识、网络编程、路由等方面的知识点,旨在帮助读者更好地理解和掌握相关知识。 一、基础知识 1. 对于程序 `func(char *str){printf(...

    C#网络编程高级篇之网页游戏辅助程序设计.part3_C#_网络编程_

    这本书是关于c#网络编程的,关于c#入门的书有很多,但是关于c#网络编程的并不多,很多教材中虽有涉及网络编程但都是泛泛而谈,很多理论概念掺杂在其中,让人很难理解,而这本不同,含有非常多的例子,从简到深,甚至...

    Unix 网络编程 卷1 第三版 源代码

    《UNIX网络编程》(第1卷)(套接口API第3版)第1版和第2版由已故UNIX网络专家W. Richard Stevens博士独自编写。《UNIX网络编程》(第1卷)(套接口API第3版)是3版,由世界著名网络专家Bill Fenner和Andrew M. Rudoff执笔,...

    UNIX环境高级编程+UNIX网络编程卷1.PDF版

    《UNIX环境高级编程》与《UNIX网络编程卷1:协议》是两本深入解析UNIX系统编程的经典著作。在深入理解这些书籍的知识点之前,我们先要了解UNIX系统的基础概念。 UNIX是一个多用户、多任务的操作系统,其设计哲学...

    网络编程实用教程(程序源代码).zip

    全书分为10章,第1章介绍网络编程的基本概念及模式,第2章介绍套接字网络编程基础,第3章介绍Windows环境的WinSock编程基础,第4章介绍MFC编程,第5章介绍MFC WinSock类的编程,第6章介绍WinInet编程,第7章介绍...

Global site tag (gtag.js) - Google Analytics