go学习 八
tcp链接
服务器端(单链接)

tcp客户端代码

tcp服务端代码(携程处理,处理并发)


读取用户发送的多条数据(使用nc做测试时,发送内容自带 \n 所以要减1 如果自己写的客户端不需要 减1 具体减几 需要看换行符时几个字符)

客户端
接收键盘输入的内容,发送给服务器,然后接收服务器回复的内容

os.Stat


实例代码 

运行效果

文件传输

发送放




接收放




并发聊天室
http服务器段

客户端发送get请求

开启服务端,开启客户端,客户端接收到的信息

服务端代码示例

代码实例

结果

客户端

运行结果

百度贴吧小爬虫




使用并发完成爬虫 爬取效率明显提升



代码
package main import "fmt" import "net/http" import "os" import "strconv" func Writeinfo(i int, ch chan<- int) { //爬取数据,并将数据写入到文件中 url := "https://tieba.baidu.com/f?kw=%E8%8D%A3%E8%80%80v20&ie=utf-8&pn=" + strconv.Itoa((i-1)*50) //拼接url strconv.Ito用这种方式来转换格式 fmt.Println(url) result, err := http.Get(url) //访问相应的url if err != nil { fmt.Println("http get err=", err) } filename := strconv.Itoa(i) + ".html" f, err1 := os.Create(filename) //创建空文件 buf := make([]byte, 1024) if err1 != nil { fmt.Println("os.Create err=", err1) } var info string for { n, err2 := result.Body.Read(buf) if err2 != nil { break } info += string(buf[:n]) //将内容写到字符串中去 } f.WriteString(info) //把字符串作为内容写入到空文件中 f.Close() //关闭文件 ch <- i //将i写如到管道中去 } func Handelspider(star, end int) { ch := make(chan int) for i := star; i < end; i++ { go Writeinfo(i, ch) //携程, } for { j := <-ch //主携程,需要在此阻塞住 否则主携程直接结束会导致其他携程结束 fmt.Printf("这是在爬取第%d页的数据\n", j) } } func main() { var star, end int fmt.Println("请输入开始点:") fmt.Scan(&star) fmt.Println("请输入结束点:") fmt.Scan(&end) fmt.Println(star, end) Handelspider(star, end) }
浙公网安备 33010602011771号