2013-07-17 41 views
0

我聊天客户端,但是当我运行它,我得到这样一个错误:的Socket程序需要一个整数

Traceback (most recent call last): 
    File "C:\Users\Public\Documents\Programming\Chat Client\Chat Client.py", line 21, in 
<module> 
    s = socket.socket((socket.AF_INET, socket.SOCK_STREAM)) 
    File "C:\Program Files\Python33\lib\socket.py", line 94, in __init__ 
    _socket.socket.__init__(self, family, type, proto, fileno) 
TypeError: an integer is required 

我不知道这意味着什么,以便任何人都可以帮我吗?

这里是我的程序代码:

# Import Modules 
from tkinter import * 
from socket import * 
from threading import * 

# Window Setup 
root = Tk() 
root.title('Chat Client') 
root.state('zoomed') 

# Chat Variables 
global s 
s = socket.socket((socket.AF_INET, socket.SOCK_STREAM)) 
s.connect((TARGET, DEFAULT_PORT)) 

enter = StringVar() 
TARGET = s.gethostname() 
DEFAULT_PORT = 45000 

# Chat Message Box Setup 
chat = Text(root, height=31, state=DISABLED) 
entry = Entry(root, fg='blue', textvariable=enter, width=200) 
scroll = Scrollbar(root) 

chat['yscrollcommand'] = scroll.set 
scroll['command'] = chat.yview 

scroll.pack(side=RIGHT, fill=Y) 
chat.pack(side=TOP, fill=X) 
entry.pack(side=BOTTOM) 

# Send Command 
def send(event): 
    msg = enter.get() 
    chat['state'] = NORMAL 
    chat['fg'] = 'blue' 
    chat.insert(END, ('You: ' + msg + '\n')) 
    while 1: 
     s.sendall(msg) 
    chat['state'] = DISABLED 
    chat['fg'] = 'black' 
    enter.set('') 
    s.close() 

    entry.bind('<Return>', send) 

def recieve(): 
    s.bind((TARGET, DEFAULT_PORT)) 
    s.listen(True) 
    conn, addr = s.accept() 
    while True: 
     data = conn.recv(1024) 
    chat['state'] = NORMAL 
    chat['fg'] = 'red' 
    chat.insert(END, ('Stranger: ' + data + '\n')) 

thread.start(recieve,()) 
thread.start(send,()) 

root.mainloop() 

所以,任何人都可以请帮我这个,因为我不知道我需要什么我的代码来解决这个问题做。有任何想法吗?

在此先感谢!

回答

2

您传递的是tuple对象(socket.AF_INET, socket.SOCK_STREAM)。您需要将它们作为单独的参数传递:socket.socket(socket.AF_INET, socket.SOCK_STREAM)socket.AF_INETsocket.SOCK_STREAM分别包含整数值2和1。

相关问题